假设我销售 T 恤,并且有一个表格,用于提取销售的颜色和数量以及客户,并且我想创建一个在 x 轴和 y 轴上包含 100 种颜色的矩阵,这样我就可以确定 T 恤的颜色客户在第一个订单上购买的商品以及他们在第二个订单上回来购买的颜色。
如何在不写出 1000 个 case when 语句的情况下创建矩阵?
首次购买表
|Customer|Color|PurchaseQty|
----------------------------
| 1 |Blue | 2 |
| 2 |Red | 1 |
| 3 |White| 2 |
---------------------------
第二个购买表
|Customer|Color|PurchaseQty|
----------------------------
| 1 |Red | 1 |
| 2 |White| 3 |
| 3 |Blue | 1 |
---------------------------
Red White Blue
--------------------------------------
Red | 1
--------------------------------------
White| 1
--------------------------------------
Blue | 1
--------------------------------------
最佳答案
动态枢轴的示例有很多,但这里有一个可以处理您的 X/Y 矩阵
Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName(Color) From #Second Order by 1 For XML Path('')),1,1,'')
Select @SQL = '
Select [YAxis] as [Color],' + @SQL + '
From (
Select YAxis = A.Color
,XAxis = B.Color
,Value = 1
From #First A
Join #Second B on (A.Customer=B.Customer)
) A
Pivot (max(Value) For [XAxis] in (' + @SQL + ') ) p'
Exec(@SQL);
返回
Color Blue Red White
Blue NULL 1 NULL
Red NULL NULL 1
White 1 NULL NULL
关于SQL 产品矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43213803/