【发布时间】:2021-06-29 19:22:41
【问题描述】:
表-A
| ProductId | BrandName |
|---|---|
| 1 | Brand-1 |
| 2 | Brand-2 |
| 3 | Brand-3 |
表-B
| DCDate | DCNo | ProductId | Weight |
|---|---|---|---|
| 2021-03-09 | 3 | 1 | 12.5 |
| 2021-03-09 | 3 | 1 | 12.6 |
| 2021-03-09 | 3 | 1 | 12.5 |
| 2021-03-09 | 3 | 2 | 10.5 |
| 2021-03-09 | 3 | 2 | 10.4 |
| 2021-03-09 | 3 | 3 | 15.5 |
| 2021-03-09 | 1 | 1 | 12.5 |
| 2021-03-09 | 1 | 3 | 15.7 |
| 2021-03-09 | 2 | 2 | 10.6 |
| 2021-03-09 | 4 | 1 | 12.7 |
| 2021-03-09 | 4 | 1 | 12.6 |
预期结果:-
| BrandName | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| Brand-1 | 1 | 0 | 3 | 2 |
| Brand-2 | 0 | 1 | 2 | 0 |
| Brand-3 | 1 | 0 | 1 | 0 |
需要动态透视查询
我尝试了什么
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME([DCNo]) from [Table-B] FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'')
set @query = 'SELECT ' + @cols + '
from
(
SELECT a.[DCNo] , b.[BrandName], count(*) as Total FROM [Table-B] a inner join [Table-A] b on a.[ProductID]=b.[ProductID] group by [DCNo] , b.[BrandName] order by DCNo, b.[BrandName]
) x
pivot
(
max(Total)
for DCNo in (' + @cols + ')
) p '
execute(@query)
【问题讨论】: