2014-05-08 61 views
0

我需要一些幫助來完成查詢。我有一個表中SQLFiddle:查詢以顯示錶格中的兩列單列

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

我需要的結果設置如下,即:查詢應顯示三列,首先是名字,第二個是「一」,三是「兩節」。它只顯示col'one'中的數據,如果該名稱在tbl1中的值爲'one',那麼它應該保持空白。只有'姓名'具有相應的「兩個」值時,相似的第三列才應顯示值。

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

回答

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

+0

我實際的數據庫是重和查詢是巨大。有了這個條件,它會拋出錯誤 - 而不是一個單一的組函數。有許多表加入時還有其他方法可以做到這一點。查詢在條件下運行良好:選擇Where Book ='one',但不能在該條件下寫入Book ='two'。否則它會加入並返回空行。 – user1630575

+0

你有什麼錯誤? –

+0

沒有一個組功能。 – user1630575

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; 
1

在11g +及以上使用透視:

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