小编典典

SQL行到列(仅位值的数据透视)

sql

我试图将结果行转换为列,但仅使用位值。为了更好地解释我的意思,我的桌子看起来像这样;

Id    Item
-------------------
1     TextLineA
1     TextLineB
2     TextLineA

我想要实现的是这样的布局;

Id TextLineA  TextLineB
--------------------------
1     True       True
2     True       False

抱歉我的格式不正确,但希望它能传达我想要的内容。我已经尝试过Pivot,但是我没有什么可总结的,因为我只想要true / false值而不是总和。

另外,我大约有15列,我不介意静态地将它们写出来。任何指针将不胜感激!


阅读 236

收藏
2021-04-07

共1个答案

小编典典

这种方法将解决此问题:

DECLARE @Example TABLE (Id int, Item varchar(20))

INSERT INTO @Example (ID, Item)
SELECT 1, 'TextLineA' UNION ALL
SELECT 1, 'TextLineB' UNION ALL
SELECT 2, 'TextLineA' UNION ALL
SELECT 3, 'TextLineA' UNION ALL
SELECT 3, 'TextLineB' UNION ALL
SELECT 3, 'TextLineC'

select ID, 
  MAX(CASE WHEN Item='TextLineA' THEN 1 ELSE 0 END) as TextLineA,
  MAX(CASE WHEN Item='TextLineB' THEN 1 ELSE 0 END) as TextLineB,
  MAX(CASE WHEN Item='TextLineC' THEN 1 ELSE 0 END) as TextLineC
FROM @Example
GROUP BY ID

结果是:

ID  TextLineA   TextLineB   TextLineC
1   1           1           0
2   1           0           0
3   1           1           1

其中1为true,0为false。

2021-04-07