首页 > 解决方案 > 没有 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 获得上述输出的技巧或更好的方法?

标签: sqlsql-serverpivot-table

解决方案


这可以使用动态查询来实现。

  1. 获取不同的类别以生成列
  2. 使用动态列构建您的 sql 字符串
  3. 转动您的列。
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;

推荐阅读