2013-02-01 136 views
1

是否有可能將2條SQL SELECT語句的結果作爲一條語句連接,其中兩條語句都查詢相同的表,並在同一列中查找值?JOIN兩條SELECT語句的結果

我想有一個任務的id(這很好),但是我想過濾掉某些值到2個單獨的列。

目前我得到了2得到的數據分開:

SELECT id, string_value as Station FROM table WHERE datatype= 'station' 

(列數據類型並不需要看到)

回報是這樣的:

id   Station 
task1   station1 
task2   station2 

,然後我有

SELECT id, string_value as RespondingAction FROM table 
WHERE datatype='RespondingAction' 

返回:

id    RespondingAction 
task1   Approve 
task2   Decline 

我想基本上結合這2個查詢,但我不知道怎麼樣,因爲他們看起來都在同一列中的數據。希望最終的結果是這樣的:

id   Station   RespondingAction 
task1   station1   Approve 
task2   station2   Decline 
task3   station1   Decline 
task4   station3   Pending (if null) 

對不起,如果這不是太清楚;我是新來的,並盡我所能解決這個問題!

回答

1
SELECT id, MAX(Station), NVL(Max(RespondingAction), 'Pending') 
FROM 
    (SELECT id, 
    string_value as Station, 
    NULL as RespondingAction 
    FROM table 
    WHERE dataType = 'station' 

    UNION 

    SELECT id, 
    NULL as Station, 
    string_value as RespondingAction 
    FROM table 
    WHERE dataType = 'RespondingAction') 
GROUP By id 

編輯

你也可以嘗試更換

NVL(Max(RespondingAction), 'Pending') 

通過

COALESCE(MAX(RespondingAction), CAST('Pending' AS <the type of column string_value>)) 
+0

@John第一次誤解;) –

+0

在TOAD給了一個bash(不知道我是否應該在之前提到這個,正如我所說的,在這方面很新穎)。我在第一行遇到'字符集不匹配'錯誤,它打到'Pending' – John

+0

@John您可能會嘗試通過NVL更改COALESCE(您正在與Oracle合作,對吧?) –

1

使用CASE

SELECT id, 
    case dataType when 'station' 
       then string_value else 'Pending' end Station, 
    case dataType when 'RespondingAction' 
       then string_value else 'Pending' end RespondingAction 
FROM table WHERE datatype IN ('station','RespondingAction')