从表中选择值,其中来自一列的值被分成多列

时间:2014-04-06 17:32:18

标签: sql

我正在尝试开发一个查询,其中单个列的值被拆分为两个或多个单独的列,以反映特定ID是否具有每个不同的值。

例如,我有一个这样的表:

------------
| id | Val |
|----|-----|
| 1  |  A  |
| 1  |  B  |
| 2  |  A  |
| 3  |  A  |
| 4  |  B  |
| 5  |  A  |
------------

该查询将生成一个如下所示的表:

----------------------
| id | Val_1 | Val_2 |
|----|-------|-------|
| 1  |  A    |  B    |
| 2  |  A    |       |
| 3  |  A    |       |
| 4  |       |  B    |
| 5  |  A    |       |
----------------------

具体来说,我希望这个查询只显示缺少值的id(即id" 1"会被淘汰出局)。

到目前为止,我已经尝试使用自内部联接,但是我无法找到选择WHERE子句来生成它。

任何建议?

谢谢!

1 个答案:

答案 0 :(得分:2)

更新:过滤掉具有Val_1和Val_2

的列
SELECT * FROM 
(
SELECT id, MAX(CASE WHEN val='A' THEN 'A' END) as Val_1, 
           MAX(CASE WHEN val='B' THEN 'B' END) as Val_2
FROM table1 GROUP BY id
)a
WHERE Val_1 IS NULL OR Val_2 IS NULL;