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
您可以使用以下查询来实现它:
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