2

我有一个名为 category 的表,其值如下,

类别 ID | 价值 | 旗帜

1 25 a
2 26 a
3 27 a
1 28 m
2 23 m
1 36 p
2 33 p

现在我想根据标志将此表中存在的行转换为列,例如

类别 ID | 值 | 米值 | PValue
1 25 28 36
2 26 23 33
3 27 null null

我正在尝试根据类别 id 加入,但即使我在查询中使用左外连接,我也只是在结果集中获取匹配的记录(内连接)。

我的查询:

SELECT 
  A.CategoryId, 
  A.Value AS actual, 
  B.Value AS projected, 
  C.Value AS Manual
FROM ((a AS A left JOIN b AS B ON A.categoryid=B.categoryid) 
  left JOIN c AS C ON A.categoryid=C.categoryid) 
WHERE (((A.flag)="a") and ((B.flag)="p") and ((C.flag) ="m"))

如果我有 3 个不同的表中的数据,我会得到正确的结果。

我只想检查在使用自连接时将行转换为列的最佳方法是什么...

谢谢, 巴拉尼

4

1 回答 1

3

尝试这个:

SELECT CategoryId, 
       MIN(SWITCH(YourTable.Flag = 'a',Value)) AS aValue,
       MIN(SWITCH(YourTable.Flag = 'm',Value)) AS mValue,
       MIN(SWITCH(YourTable.Flag = 'p',Value)) AS pValue
FROM YourTable
GROUP BY CategoryId
于 2011-09-20T16:17:22.033 回答