我想在表上执行自连接,以按列方式呈现值。对于每个对象,都有多个属性(最多达到已知限制),但并非所有对象的所有属性都被存储。我尝试过各种连接,但总是缺少行,我希望使用空值。
起始表:
对象ID | 属性 | 值 |
---|---|---|
1 | 一个 | 10 |
1 | b | 20 |
1 | c | 30 |
2 | 一个 | 15 |
2 | c | 25 |
我的目标(假设我知道三个可能的属性是 a,b,c
)是
对象ID | 一个 | b | c |
---|---|---|---|
1 | 10 | 20 | 30 |
2 | 15 | 25 |
P粉5634465792024-04-01 09:26:44
您可以使用以下查询来实现它:
SELECT ObjectID, SUM(CASE WHEN Attribute = 'a' THEN Value ELSE NULL END) AS a, SUM(CASE WHEN Attribute = 'b' THEN Value ELSE NULL END) AS b, SUM(CASE WHEN Attribute = 'c' THEN Value ELSE NULL END) AS c FROM mytable GROUP BY ObjectID
说明:
使用 CASE
语句,我们选择 Attribute
的值作为特定值,即“a”、“b”等。因此,对于该特定列,仅选择该特定属性的值。
使用 SUM
我们聚合 Value
字段的值。这样,任何 ObjectID
的多行值都会聚合到一行中。
如果您不愿意使用 SUM
因为您可能有非数字值,您可以按照 @xQbert 的建议使用 MAX
,如下所示:
SELECT ObjectID, MAX(CASE WHEN Attribute = 'a' THEN Value ELSE NULL END) AS a, MAX(CASE WHEN Attribute = 'b' THEN Value ELSE NULL END) AS b, MAX(CASE WHEN Attribute = 'c' THEN Value ELSE NULL END) AS c FROM mytable GROUP BY ObjectID