我需要一些查询编写方面的帮助。我在SQLFiddle中有一个表:
http://sqlfiddle.com/#!2/7f51a
我需要一个如下所示的结果集,即:查询应该显示三列,第一列是名称,第二列是'One',第三列是'two'。它仅在col'one'中显示数据,如果该名称在tbl1中具有值'one',否则它应该保持空白。仅当“名称”具有相应的“两个”值时,类似的第三列才应显示值。
Name | One | Two
--------+-------+----------
Jig | Yes | Yes
Mig | | Yes
Dig | Yes |
答案 0 :(得分:1)
试试这个:
SELECT Name,
IFNULL(MAX(CASE WHEN Book ='one' THEN 'Yes' END),'') as One,
IFNULL(MAX(CASE WHEN Book='two' THEN 'Yes' END),'') as Two
FROM tbl1
GROUP BY Name
注意:对于oracle
,请使用NVL
代替IFNULL
。
结果:
NAME ONE TWO
Dig Yes
Jig Yes Yes
Mig Yes
答案 1 :(得分:1)
在11g及以上版本中使用Pivot:
select *
from tbl1
pivot (max('Yes') for book in ('one' as one, 'two' as two) );
输出:
| NAME | ONE | TWO |
|------|--------|--------|
| Dig | Yes | (null) |
| Jig | Yes | Yes |
| Mig | (null) | Yes |
Sqlfiddle:http://sqlfiddle.com/#!4/d09cf9/1
答案 2 :(得分:0)
您可以使用查询
select * from tbl1;
select name
,max(decode(book,'one','yes','-')) as one
,max(decode(book,'two','yes','-')) as two
from tbl1
group by name;