Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 CTE и LEFT JOIN  [new]
Владимир СА
Member

Откуда:
Сообщений: 7863
Приветствую всех!!!
Давно уже не общался с MS SQL...
Прошу помощи в растолковании...
SELECT @@VERSION
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (X64)   Apr 22 2011 19:23:43   
Copyright (c) Microsoft Corporation  Standard Edition (64-bit) on Windows NT 5.2 <X64> (Build 3790: Service Pack 2) 

Делается объединение CTE через LEFT JOIN с таблицей...
Для примера вывожу CTE нужных дат...
Далее объединяю с таблицей через LEFT JOIN... в надежде получить Null значения, где в таблице не присутствуют даты
DECLARE 
@p_ind_station  int,
@p_start_date datetime,
@p_end_date datetime;

SELECT @p_ind_station = 20973, @p_start_date = '20130408', @p_end_date = '20130416';

-- вывод для просмотра
SELECT @p_ind_station, @p_start_date, @p_end_date;

-- перечень нужных дат
WITH C_date(date)
as
(
	SELECT @p_start_date
	UNION ALL
	SELECT DATEADD(HH, 6, date) FROM C_date
	WHERE date < DATEADD(HH, 18, @p_end_date)
)
SELECT date FROM C_date
ORDER BY date;

-- объединение с данными
WITH C_date(date)
as
(
	SELECT @p_start_date
	UNION ALL
	SELECT DATEADD(HH, 6, date) FROM C_date
	WHERE date < DATEADD(HH, 18, @p_end_date)
)
SELECT C.date, P.temperature 
FROM C_date C
LEFT JOIN T_Z_FACT_PAR_TYP1 P
ON C.date = P.date
WHERE P.ind_station = @p_ind_station
ORDER BY C.date;

Но в результате не вижу нужных записей... Почему?

К сообщению приложен файл. Размер - 19Kb
16 апр 13, 09:32    [14185267]     Ответить | Цитировать Сообщить модератору
 Re: CTE и LEFT JOIN  [new]
Glory
Member

Откуда:
Сообщений: 104760
Потому что фильтр WHERE P.ind_station = @p_ind_station работает
16 апр 13, 09:34    [14185285]     Ответить | Цитировать Сообщить модератору
 Re: CTE и LEFT JOIN  [new]
Владимир СА
Member

Откуда:
Сообщений: 7863
Glory
Потому что фильтр WHERE P.ind_station = @p_ind_station работает
Точно, спасибо...
-- объединение с данными
WITH C_date(date)
as
(
	SELECT @p_start_date
	UNION ALL
	SELECT DATEADD(HH, 6, date) FROM C_date
	WHERE date < DATEADD(HH, 18, @p_end_date)
)
SELECT C.date, P.temperature 
FROM C_date C
LEFT JOIN
(
	SELECT * FROM T_Z_FACT_PAR_TYP1
	WHERE ind_station = @p_ind_station
) P
ON C.date = P.date
ORDER BY C.date;
16 апр 13, 09:37    [14185301]     Ответить | Цитировать Сообщить модератору
 Re: CTE и LEFT JOIN  [new]
Glory
Member

Откуда:
Сообщений: 104760
LEFT JOIN T_Z_FACT_PAR_TYP1 P
ON C.date = P.date AND P.ind_station = @p_ind_station
16 апр 13, 09:38    [14185313]     Ответить | Цитировать Сообщить модератору
 Re: CTE и LEFT JOIN  [new]
Владимир СА
Member

Откуда:
Сообщений: 7863
Glory
LEFT JOIN T_Z_FACT_PAR_TYP1 P
ON C.date = P.date AND P.ind_station = @p_ind_station
Спасибо...
16 апр 13, 09:40    [14185322]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить