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

Откуда:
Сообщений: 6
USE WorkDBSQL;
GO

BEGIN TRANSACTION;

DECLARE @LastDate DateTime = (SELECT TOP 1 DateTimeEnd FROM TotalJrnl ORDER BY DateTimeEnd DESC);

WITH JournalTmp AS
(SELECT DateAdd(minute, 15 * (DateDiff(minute, '19000101', jDate) / 15), '19000101') AS jDate, jFactDose, jDest FROM Journal_TWC_201_2 
	WHERE @LastDate IS NULL OR jDate >= @LastDate)

MERGE INTO
  TotalJrnl
USING
	(SELECT jDate, CAST(SUM(jFactDose) AS decimal(12,2)) AS jFactDose, MAX(jDest) AS jDest
	FROM JournalTmp GROUP BY jDate) AS TmpData
ON
  DateTimeEnd = TmpData.jDate
WHEN MATCHED AND (jDest = 0) THEN
		UPDATE SET TWC_201 = TmpData.jFactDose
--WHEN MATCHED AND (jDest = 1) THEN
--		UPDATE SET TWC_201 = TmpData.jFactDose, TWC_201_1 = TmpData.jFactDose
--WHEN MATCHED AND (jDest = 2) THEN
--		UPDATE SET TWC_201 = TmpData.jFactDose, TWC_201_2 = TmpData.jFactDose
--WHEN MATCHED AND (jDest = 3) THEN
--		UPDATE SET TWC_201 = TmpData.jFactDose, TWC_201_3 = TmpData.jFactDose
--WHEN MATCHED AND (jDest = 4) THEN
--		UPDATE SET TWC_201 = TmpData.jFactDose, TWC_201_4 = TmpData.jFactDose

WHEN NOT MATCHED AND (jDest = 0) THEN
	INSERT (DateTimeEnd, TWC_201) VALUES (TmpData.jDate, TmpData.jFactDose)
--WHEN NOT MATCHED AND (jDest = 1) THEN
--	INSERT (DateTimeEnd, TWC_201, TWC_201_1) VALUES (TmpData.jDate, TmpData.jFactDose, TmpData.jFactDose)
--WHEN NOT MATCHED AND (jDest = 2) THEN
--	INSERT (DateTimeEnd, TWC_201, TWC_201_2) VALUES (TmpData.jDate, TmpData.jFactDose, TmpData.jFactDose)
--WHEN NOT MATCHED AND (jDest = 3) THEN
--	INSERT (DateTimeEnd, TWC_201, TWC_201_3) VALUES (TmpData.jDate, TmpData.jFactDose, TmpData.jFactDose)
--WHEN NOT MATCHED AND (jDest = 4) THEN
--	INSERT (DateTimeEnd, TWC_201, TWC_201_4) VALUES (TmpData.jDate, TmpData.jFactDose, TmpData.jFactDose);

COMMIT TRANSACTION;


Есть таблица Journal_TWC_201_2 из которой надо произвести усреднение по времени (в данном случае 15 минут), вычисленную сумму из колонки jFactDose за период положить в колонку TWC_201 таблицы TotalJrnl и время за которое усреднялось в колонку DateTimeEnd таблицы TotalJrnl - это у меня работает.
Но есть еще задача при jDest из таблицы Journal_TWC_201_2 отличном от 0 дублировать эту сумму в колонку таблицы TotalJrnl (имя колонки строится так - TWC_201_ и цифра из jDest)...
Пытался сделать несколько WHEN MATCHED AND и WHEN NOT MATCHED AND, но их оказывается нельзя использовать больше одного... Помогите переделать эту часть правильно пожалуйста.
3 дек 16, 19:24    [19963659]     Ответить | Цитировать Сообщить модератору
 Re: Помогите исправить запрос  [new]
кролик-зануда
Guest
korochinskiy,
set  TWC_201 = ...
     ,TWC_201_1 =case when jDest=1 then ... else TWC_201_1 end
     ,TWC_201_2 =case when jDest=2 ...
3 дек 16, 19:32    [19963696]     Ответить | Цитировать Сообщить модератору
 Re: Помогите исправить запрос  [new]
korochinskiy
Member

Откуда:
Сообщений: 6
Спасибо, получилось.
3 дек 16, 19:44    [19963748]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить