Ple*_*ase 0 sql sql-server sql-server-2014
我有这样的源表
ProductName SaleReceipt SaleCode
--------------------------------
F-Apple 1001 1
F-Orange 1002 2
G-Rice 1003 3
G-Barile 1005 4
G-Oats 1006 1
V-Carrot 1007 4
V-Cabbage 1008 3
V-Potato 1009 1
V-Tomato 1010 1
Chocolate 1011 4
Cookies 1012 1
Cakes 1013 2
Run Code Online (Sandbox Code Playgroud)
我需要创建一个这样的报告
30 Day delay 60 Day Delay 90 day delay 120 day delay
Fruits 1 1 0 0
Grains 1 0 1 1
Vegetables 2 0 1 1
Other category 1 1 0 1
Run Code Online (Sandbox Code Playgroud)
创建报告的条件是:
其他产品名称在其他类别中
30天延迟:SaleDode = 1的(SaleReceipt)计数
120天延迟:SaleReode的计数(SaleReceipt)> = 4
我找不到如何分组两次.我正在使用SQL Server 2014.
你可以case在一个group by.或者使用查找表:
select coalesce(c.name, 'Other category'),
sum(case when salescode = 1 then 1 else 0 end) as salecode_1,
sum(case when salescode = 2 then 1 else 0 end) as salecode_2,
sum(case when salescode = 3 then 1 else 0 end) as salecode_3,
sum(case when salescode = 4 then 1 else 0 end) as salecode_4
from t left join
(values ('F-%', 'Fruit'), ('G-%' , 'Grain'), ('V-%', 'Vegetable')
) c(pattern, name)
on t.productname like c.pattern
group by coalesce(c.name, 'Other category');
Run Code Online (Sandbox Code Playgroud)