SQL SERVER PIVOT, как PEPSI, подпадает под год, затем по месяцам и c .. (см. Прилагаемое изображение для ясной идеи) - PullRequest
2 голосов
/ 24 января 2020

Я новичок в PIVOT ... поэтому я не знаю, возможно ли это с Pivot.

Вот таблица и пример данных, которые я использовал

create table sales_history (brandcode varchar(10) , 
                            syear smallint, 
                            smonth smallint, 
                            salesvalues float )  


insert into sales_history values ('PPS', 2018,1, 256400.00), ('PPS', 2018,2, 278650.00), ('PPS', 2018,3, 236500.00)
insert into sales_history values ('CCL', 2018,1, 356200.00), ('CCL', 2018,2, 365100.00), ('CCL', 2018,3, 174300.00)
insert into sales_history values ('MND', 2018,1, 275200.00), ('MND', 2018,2, 415180.00), ('MND', 2018,3, 274500.00) 
insert into sales_history values ('PPS', 2019,1, 356400.00), ('PPS', 2019,2, 378650.00), ('PPS', 2019,3, 336500.00)
insert into sales_history values ('CCL', 2019,1, 456200.00), ('CCL', 2019,2, 465100.00), ('CCL', 2019,3, 274300.00)
insert into sales_history values ('MND', 2019,1, 375200.00), ('MND', 2019,2, 515180.00), ('MND', 2019,3, 374500.00) 

- запрос PRIVOT

select *
 from (
 select *
  from sales_history
  ) as t1
  pivot 
   (sum (salesvalues) for syear IN ([2018],[2019])) 
  as pivot_brand_sales 

enter image description here

используя указанный выше запрос, я получил вывод, как в прикрепленном

[пожалуйста, посмотрите вложение для требуемого вывода, который я пытался, и вывод, который я получил, используя приведенный выше запрос]

Ответы [ 2 ]

3 голосов
/ 24 января 2020

Я бы использовал агрегацию условий для этого:

select 
    brandcode,
    sum(case when syear = 2018 and smonth = 1 then salesvalue else 0 end) [2018-01],
    sum(case when syear = 2018 and smonth = 2 then salesvalue else 0 end) [2018-02],
    sum(case when syear = 2018 and smonth = 3 then salesvalue else 0 end) [2018-03],
    sum(case when syear = 2019 and smonth = 1 then salesvalue else 0 end) [2019-01],
    sum(case when syear = 2019 and smonth = 2 then salesvalue else 0 end) [2019-02],
    sum(case when syear = 2019 and smonth = 3 then salesvalue else 0 end) [2019-03]
from sales_history
group by brand_code
1 голос
/ 24 января 2020

Это для SSRS

Step 1: Connect DataSource
Step 2: Create DataSet and paste your query in Query Box
Step 3: Click on Insert tab and Click on Matrix and you can put BrandCode into RowGroups
and sYear into ColumnGroups and than Smonth into ColumnGroups and SalesValues Put into Values And Click on Next Button
Step 4: If you dont want to Substotals and Grand Totals uncheck the check box and If you dont want to expand/collapse button on grid than please 
uncheck the checkbox and then click next and finish .
your result will be show as you want.

Regards 
Shehroz

enter image description here

...