Нужно считать строки из двух столбцов - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь подсчитать, сколько раз [Идентификатор отслеживания] и [Идентификатор отслеживания1] появляются в таблице.

enter image description here

The result should look like this.

enter image description here

This works great when I use a group by function.

select [Group], datename(month,[date]) as Month, count([Tracking ID]) + count([Tracking ID1]) as [Number of Record]
from   [Table]
group by    
    [Group],
    datename(month,[date]) 

I need to use a pivot function. How do I modify the code below to get the desired results

select * 
from 
    (
select  
    [Group], datename(month,[date]) as Month, (count([Tracking ID])over () + count([Tracking ID1]) over () ) as [Number of Record]
From    
    [Table]
) sourcetbl
pivot
    (count([Number of Record])  
for [Month] in ([June], [July])
) as pivotTable;

Currently, my query returns 2 instead of 4.

введите описание изображения здесь

Ответы [ 2 ]

2 голосов
/ 04 августа 2020

Просто используйте условное агрегирование:

select [Group],
       sum(case when month([date]) = 6 then 1 else 0 end) as jun,
       sum(case when month([date]) = 7 then 1 else 0 end) as jul
from  [Table]
group by [Group];
0 голосов
/ 04 августа 2020

Это должно работать на основе предоставленной информации:

SELECT
    [Group],
    ISNULL([June], 0) AS [June],
    ISNULL([July], 0) AS [July]
FROM
(
    SELECT
        [Group],
        DATENAME(MONTH, [Date]) AS [Date],
        COUNT(Tracking_ID) + COUNT(Tracking_ID1) AS NumberOfRecords
    FROM [Table]
    GROUP BY [Group], [Date]
) AS D
PIVOT
(
    MAX(NumberOfRecords)
    FOR [Date] IN 
    (
        [June],
        [July]
    )
) AS PIV

Кажется, что части OVER () в вашем запросе заставляли функции COUNT не вести себя как агрегатные функции, поэтому ваш запрос работает без GROUP BY, где в этом случае требуется GROUP BY.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...