KyLim0211 Ответов: 1

Sql insert #temp table


CREATE TABLE #TEMP (Date  NVARCHAR(256),Pending NVARCHAR(256),Complete NVARCHAR(256) ,Total  NVARCHAR(256));
INSERT INTO #TEMP (Date,Pending,Total) 
SELECT DISTINCT(DATEE),'','' from E_R_MainT
GROUP BY DATEE

UPDATE #TEMP
SET Pending=(SELECT COUNT(R_ID) FROM E_R_MainT WHERE STATUS !='S_2' GROUP BY (CONVERT(char(10), HOD_DT ,126)) )
WHERE #TEMP.Date =  (SELECT DISTINCT(DATEE) from E_R_MainT
GROUP BY DATEE)

UPDATE #TEMP
SET Complete=(SELECT COUNT(R_ID) FROM E_R_MainT WHERE STATus !='S_1' GROUP BY DATEE )
WHERE #TEMP.Date =  (SELECT DISTINCT(DATEE) from E_R_MainT
GROUP BY DATEE )

UPDATE #TEMP
SET Total=(SELECT COUNT(R_ID) FROM E_R_MainT  GROUP BY (DATEE) )
WHERE #TEMP.Date =  (SELECT DISTINCT(DATEE) from E_R_MainT
GROUP BY  DATEE
SELECT * FROM #TEMP

запрос выше - это мой запрос, который вставляет временную таблицу с помощью SELECT
заявление.



Ниже моя таблица

СТАТУС ДАТЫ R_ID
1001 2016-08-15 s_1
1002 2016-08-12 s_2
1003 2016-08-12 s_2
1004 2016-08-15 2_2
1005 2016-08-12 s_1
1006 2016-08-15 s_2
1007 2016-08-11 s_1

*s_1 = ожидание,*s_2 = завершение
я ожидаю получить такой результат :

Срок До Завершения Всего
2016-08-11 1 0 1
2016-08-12 1 2 3
2016-08-15 1 2 3

Что я уже пробовал:

Подзапрос вернул более 1 значения. Это не разрешено ,я получаю эту ошибку при выполнении запроса

1 Ответов

Рейтинг:
0

Maciej Los

Я бы создал таблицу "словарь"!

Попробовать это:

DECLARE @tmp TABLE(OldStatus, NewStatus)
INSERT INTO @tmp(OldStatus, NewStatus)
VALUES('s_1', 'Pending'), ('s_1', 'Complete')

SELECT Date, [Pending], [Complete], [Pending] + [Complete] AS  [Total]
FROM (
    SELECT A.Date, B.NewStatus AS Status 
    FROM #Temp AS A INNER JOIN @tmp AS B ON A.Status = B.OldStatus
) AS DT
PIVOT(COUNT(Date) FOR Status IN([Pending], [Complete], [Total])) AS PV