将信息从一行扩展到 SQL 中所有类似分组的行

Expanding information from one row to all similarly grouped rows in SQL

我不确定完成此操作所需的逻辑,但我想采取这样的 table...

+----+------+
| Id | Type |
+----+------+
| 10 | A    |
| 10 | B    |
| 10 | C    |
| 20 | A    |
| 20 | C    |
+----+------+

...最后得到这样的 table...

+----+------+---+---+---+
| Id | Type | A | B | C |
+----+------+---+---+---+
| 10 | A    | 1 | 1 | 1 |
| 10 | B    | 1 | 1 | 1 |
| 10 | C    | 1 | 1 | 1 |
| 20 | A    | 1 | 0 | 1 |
| 20 | C    | 1 | 0 | 1 |
+----+------+---+---+---+

...其中每个 Id 都将创建新列以将有关 Type 的信息整合到 Id 的每一行中。由于 10 有一行 A、B 和 C 类型,那么所有 ID 为 10 的行在新列 ABC 中都应该有一个 1/true .

我知道如何在每行的基础上执行此操作,但无法解决如何将多行信息合并到同一 ID 的每一行中的问题。

试试下面的逻辑- Demo

SELECT *,
(SELECT COUNT(DISTINCT Type) FROM your_table B WHERE B.ID = A.Id and B.Type = 'A') A,
(SELECT COUNT(DISTINCT Type) FROM your_table C WHERE C.ID = A.Id and C.Type = 'B') B,
(SELECT COUNT(DISTINCT Type) FROM your_table D WHERE D.ID = A.Id and D.Type = 'C') C
FROM your_table A

还有另一个选择- Demo

SELECT *,
SUM(CASE WHEN Type= 'A' THEN 1 ELSE 0 END) OVER(PARTITION BY Id) A,
SUM(CASE WHEN Type= 'B' THEN 1 ELSE 0 END) OVER(PARTITION BY Id) B,
SUM(CASE WHEN Type= 'C' THEN 1 ELSE 0 END) OVER(PARTITION BY Id) C
FROM your_table