sql - 没有 SUM/Count 或更好方法的数据透视表
问题描述
我有以下两个表:
员工表
id name
1 John Doe
产品表
id category units
1 Chairs 5
1 Computers 2
1 Pens 40
当我运行以下
Select name, category, units FROM employee
JOIN Products
ON products.id = employee.id
我得到三行数据:
name category units
john doe chairs 5
john doe computers 2
john doe pens 40
我希望我的输出看起来像:
name chairs computers pens
john doe 5 2 40
我尝试了数据透视表,但它要求我有一个总和/计数字段,但我不想对任何数据求和。是否有比 Pivot 获得上述输出的技巧或更好的方法?
解决方案
这可以使用动态查询来实现。
- 获取不同的类别以生成列
- 使用动态列构建您的 sql 字符串
- 转动您的列。
declare @cols nvarchar(max);
declare @sql nvarchar(1000);
//generate category columns
select @cols =
STUFF((select N'],[' + category
from (select distinct category
from Products) AS t1
FOR XML PATH('')
), 1, 2, '') + N']';
set @sql = N'Select name, units, ' + @cols + N' FROM employee
JOIN Products
ON products.id = employee.id ) t1
pivot
(
max(t1.category)
for t1.category in (' + @cols + N')
) p '
exec sp_executesql @sql;