查询以显示表中的两列单列

时间:2014-05-08 10:45:39

标签: database oracle oracle10g

我需要一些查询编写方面的帮助。我在SQLFiddle中有一个表:

http://sqlfiddle.com/#!2/7f51a

我需要一个如下所示的结果集,即:查询应该显示三列,第一列是名称,第二列是'One',第三列是'two'。它仅在col'one'中显示数据,如果该名称在tbl1中具有值'one',否则它应该保持空白。仅当“名称”具有相应的“两个”值时,类似的第三列才应显示值。

Name    |   One |   Two
--------+-------+----------
Jig     |   Yes |   Yes  
Mig     |       |   Yes  
Dig     |   Yes |   

3 个答案:

答案 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

Fiddle here

答案 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;