Sql server 交叉表查询未聚合结果
我正在从fiddle示例创建一个交叉选项卡视图。基本上,我收到了一张包含Sql server 交叉表查询未聚合结果,sql-server,tsql,sql-server-2005,pivot,Sql Server,Tsql,Sql Server 2005,Pivot,我正在从fiddle示例创建一个交叉选项卡视图。基本上,我收到了一张包含客户、供应商和产品类型的表格。我想生成一个视图,其中供应商是行,列是按产品类型划分的总销售额 结构是 CustomerID Vendor ProductType -------------------------------- 1 A Type1 2 A Type2 3 B Type1 4
客户
、供应商
和产品类型
的表格。我想生成一个视图,其中供应商是行,列是按产品类型划分的总销售额
结构是
CustomerID Vendor ProductType
--------------------------------
1 A Type1
2 A Type2
3 B Type1
4 A Type2
我想要的最终结果是:
Vendor Type1 Type2
---------------------
A 1 2
B 1 0
/* Count the number of sales by Product Type for each Vendor. */
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(ProductType)
from MyTable
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT Vendor,' + @cols + '
from MyTable
pivot
(
count (ProductType)
for ProductType in (' + @cols + ')
) p
ORDER BY Vendor ASC'
execute(@query)
最终结果是每个供应商都有多行,而不是一行汇总计数
例如
有人知道我在这个问题上遗漏了什么吗
谢谢。我建议您使用子查询从表中选择所需的列。问题在于,您的数据是按
供应商
和客户ID
分组的。customerId
对于每一行都是不同的,将查询更改为以下内容将得到结果:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(ProductType)
from MyTable
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query
= 'SELECT Vendor,' + @cols + '
from
(
select vendor, producttype
from MyTable
) d
pivot
(
count (ProductType)
for ProductType in (' + @cols + ')
) p
ORDER BY Vendor ASC'
execute(@query);
看。这就产生了一个结果:
| VENDOR | TYPE1 | TYPE2 |
| A | 1 | 2 |
| B | 1 | 0 |
你有小提琴的例子吗?或者你能发布你的表格结构和一些样本数据吗?我用样本表格更新了帖子。希望它能澄清正在发生的事情。
| VENDOR | TYPE1 | TYPE2 |
| A | 1 | 2 |
| B | 1 | 0 |