2014-04-26 35 views
0

我不太確定如何正確地短語問題,但我基本上試圖開發一個SQL查詢,該信息來自SELECTs此表:使用SWITCH()將數據從列中拆分爲不同的列,並在到達行中關聯數據

------------------- 
| id | Val | Date | 
|----|-----|------| 
| 1 | A | 10/9 | 
| 1 | B | 3/14 | 
| 2 | A | 1/6 | 
| 3 | A | 4/4 | 
| 4 | B | 7/12 | 
| 5 | A | 8/6 | 
------------------- 

,併產生一個表,看起來像這樣:

------------------------------------------------ 
| id | Val_1 | Val_1_Date | Val_2 | Val_2_Date | 
|----|-------|------------|-------|------------- 
| 1 | A | 10/9  | B | 3/14  | 
| 2 | A | 1/6  |  |   | 
| 3 | A | 4/4  |  |   | 
| 4 |  |   | B | 7/12  | 
| 5 | A | 8/6  |  |   | 
------------------------------------------------ 

我已經開始和發展查詢到在Val字段中的值拉出到不同的列:

SELECT * FROM 
(
    SELECT id, MAX(SWITCH(val='A', 'A')) as Val_1, 
      MAX(SWITCH(val='B', 'B')) as Val_2 
    FROM table1 GROUP BY id 
)a 
WHERE Val_1 IS NULL OR Val_2 IS NULL; 

我該如何擴展它以取出相關日期?

(我用SWITCH()代替CASE WHEN因爲我使用類似的MS Access的驅動程序)。

謝謝!

+0

這幾乎是您的上一個問題的確切重複http://stackoverflow.com/questions/22897468/selecting-values-from-a-table-where-values-from-one-column-is-divided-into -multi – wruckie

+0

確實。但是,正如你所看到的,我把這個問題提供的答案包括在內,並且通過包含日期字段來構建問題。所以,雖然它幾乎是一個確切的重複,但它不是一個確切的重複。 – user98826

回答

0

我認爲以下應工作:

select id, SWITCH(val='A', 'A') as Val_1, SWITCH(val='A', Date) as Val_1_Date, SWITCH(val='B', 'B') as Val_2, SWITCH(val='B', Date) as Val_2_Date FROM table1 GROUP BY id 
+0

謝謝,它確實有效! – user98826

0

我不喜歡的開關,所以這裏是一個查詢,你想要做什麼沒有開關。這也回答你以前的問題。

Select distinct table1.ID, tableA.Val as Val_1, tableA.Date as Val_1_Date, 
    tableB.Val as Val_2, tableB.Date as Val_2_Date 
FROM table1 left outer join 
    table1 as tableA on table1.id = tableA.id and tableA.Val = 'A' left outer join  
    table1 as tableB on table1.id = tableB.id and tableB.Val = 'B' 

enter image description here

您可以使用ISNULL如果這是首選。這是有效的,因爲第一個表選擇一個不同的ID列,並且這兩個連接獲得A和B值。使用此方法創建選擇時,請確保在連接條件中使用tableA.Val = 'A',而不是在where子句中使用。 Where子句中有tableA.Val = 'A'將過濾掉所有NULL的。

+0

謝謝,我試過這個工作。我確實需要一個switch語句的形式,但我會堅持這一點以備將來參考。 – user98826

相關問題