SQL 行到列(仅使用位值进行透视)

SQL rows to columns (Pivot with just bit values)

我正在尝试将生成的行转换为列,但仅限于位值。为了更好地解释我的意思,我的 table 看起来像这样;

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

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

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

对于我糟糕的格式表示歉意,但希望它传达了我正在寻找的内容。我已经尝试过 Pivot 但我没有什么可以总结的,因为我只想要 true/false 值而不是总和。

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

尝试过使用 case 语句吗?

SELECT
    CASE MakeFlag
        WHEN 1 THEN 'True'
        WHEN 0 THEN 'False'
    END
FROM [AdventureWorks2012].[Production].[Product]

这种方法可以解决这个问题:

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 为真,0 为假。

使用Pivot

SELECT id,
       CASE WHEN [TextLineA] IS NOT NULL THEN 'TRUE' ELSE 'FALSE' END [TextLineA],
       CASE WHEN [TextLineB] IS NOT NULL THEN 'TRUE' ELSE 'FALSE' END [TextLineB]
FROM   Yourtable
       PIVOT (Max(Item)
             FOR item IN ([TextLineA],[TextLineB])) piv