SQL Сводная таблица без и с одинаковым результатом - PullRequest
0 голосов
/ 24 февраля 2020

Я пытаюсь получить результат подсчета посещений клиентов по местоположению, используя сводную таблицу, но подсчет (отдельный customer_id) и count (customer_id) возвращают один и тот же результат. Что мне делать? Должен ли я написать другой подзапрос только для этой части?

select Locationname as 'Location',[2020],[2019],[2018],[2017],[2016],[2015],[2014],[2013],[2012],[2011],[2010]
from (select year(date_when) [date_when2],Locationname ,count(distinct customer_id) [cst_id] from record
group by date_when,Locationname) as aws

PIVOT(
    count([cst_id]) 
    FOR [date_when2] IN (
        [2020],
        [2019],
        [2018],
        [2017],
        [2016],
        [2015],
        [2014],
        [2013],
        [2012],
        [2011],
        [2010]  
        )
) AS pivot_table

Редактировать как запрошено: это текущий результат запроса, однако я хочу видеть уникальное количество клиентов и отличия не имеют значения.

enter image description here

1 Ответ

0 голосов
/ 24 февраля 2020

Я рекомендую условное агрегирование:

select Locationname as'Location,
       count(distinct case when year(date_when) = 2020 then customer_id end) as custs_2020,
       count(distinct case when year(date_when) = 2019 then customer_id end) as custs_2019,
       count(distinct case when year(date_when) = 2018 then customer_id end) as custs_2018,
       count(distinct case when year(date_when) = 2017 then customer_id end) as custs_2017,
       count(distinct case when year(date_when) = 2016 then customer_id end) as custs_2016,
       count(distinct case when year(date_when) = 2019 then customer_id end) as custs_2015,
       count(distinct case when year(date_when) = 2015 then customer_id end) as custs_2014,
       count(distinct case when year(date_when) = 2014 then customer_id) as custs_2013,
       count(distinct case when year(date_when) = 2013 then customer_id end) as custs_2012,
       count(distinct case when year(date_when) = 2012 then customer_id end) as custs_2011,
       count(distinct case when year(date_when) = 2011 then customer_id end) as custs_2010
from record
group by Locationname;

Я не фанат синтаксиса pivot. Это привередливый, нестандартный, трудный для понимания («подзапрос» должен быть просто правильным для работы с внешним запросом) и не очень обобщаемый.

...