Reputation: 5876
I am trying to create a SQL Server PIVOT
table but I having trouble.
Here is the result I want to get:
Here is the SQL query I have prepared but I am lost. How can I make this to work.
select *
from
(select DESCRIPTION_, DISPLAYNAME, SUCCESFULRECORDCOUNT, FINISHDATETIME
from LOGTABLE (NOLOCK)
) as X
pivot
(sum(SUCCESFULRECORDCOUNT) for FINISHDATETIME in (GETDATE()-4)) as DAY1
pivot
(sum(SUCCESFULRECORDCOUNT) for FINISHDATETIME in (GETDATE()-3)) as DAY2
pivot
(sum(SUCCESFULRECORDCOUNT) for FINISHDATETIME in (GETDATE()-2)) as DAY2
pivot
(sum(SUCCESFULRECORDCOUNT) for FINISHDATETIME in (GETDATE()-1)) as DAY3
Upvotes: 0
Views: 52
Reputation: 1605
i think you can just use group by like
SELECT DESCRIPTION_,DISPLAYNAME
,SUM(IIF(FINISHDATETIME IN (GETDATE()-4),SUCCESFULRECORDCOUNT,0)) AS 'DAY1'
,SUM(IIF(FINISHDATETIME IN (GETDATE()-3),SUCCESFULRECORDCOUNT,0)) AS 'DAY2'
,SUM(IIF(FINISHDATETIME IN (GETDATE()-2),SUCCESFULRECORDCOUNT,0)) AS 'DAY3'
,SUM(IIF(FINISHDATETIME IN (GETDATE()-1),SUCCESFULRECORDCOUNT,0)) AS 'DAY4'
FROM LOGTABLE (NOLOCK)
GROUP BY
DESCRIPTION_,
DISPLAYNAME
Upvotes: 1
Reputation: 86775
https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=915122598b6f8f350127f79e21b3c12c
You need to change your dates into literal values to use in the pivot.
SELECT
*
FROM
(
SELECT
DESCRIPTION_,
DISPLAYNAME,
CAST(DATEDIFF(DAY, FINISHDATETIME, GETDATE()) AS VARCHAR(1)) AS dateNum,
SUCCESFULRECORDCOUNT
FROM
test
WHERE
FINISHDATETIME >= CAST(DATEADD(DAY, -4, GETDATE()) AS DATE)
)
data
PIVOT
(
SUM(SUCCESFULRECORDCOUNT) FOR dateNum IN ([4], [3], [2], [1])
)
pvt
;
Upvotes: 1