2016-08-08 101 views
-1

新的編輯幾個條件!案例與一列

我想獲得類似的東西:

ID1  DATE_1  DATE_2  DATE_3 
---  -------  -------  ------- 
99999 | 12-08-2016 | 14-08-2016 | 17-09-2016 

,但我得到:

ID1  DATE_1  DATE_2  DATE_3 
---- ------  -------- -------- 
99999 | 12-08-2016|   | 
99999 |   | 14-08-2016| 
99999 |   |   | 17-09-2016 

我的代碼:

create table TABE1 as 
select 
     A.ID1, 
     max(CASE 
     WHEN A.ID2 IN (123,1234,12345,123456) THEN A.CONATACTDATE 
     END) AS DATA_1, 

     max(CASE 
     WHEN A.ID2 IN (456,4567,45678,456789) THEN A.CONATACTDATE 
     END) AS DATA_2, 

     max(CASE 
     WHEN A.ID2 IN (987,9876,98765,987654) THEN A.CONATACTDATE 
     END) AS DATA_3, 

     max(CASE 
     WHEN B.ID3 IN (1,2,3,4) THEN B.ID3 
     END) AS ID_CC, 

     max(CASE 
     WHEN B.ID3 IN (1,2,3,4) THEN B.ID3 
     END) AS ID_WW, 

     max(CASE 
     WHEN B.ID3 IN (6,7,8,9) THEN B.ID3 
     END) AS ID_CC2, 

     max(CASE 
     WHEN B.ID3 IN (6,7,8,9) THEN B.ID3 
     END) AS ID_WW2 
     from DATABASE1 A LEFT JOIN 
     (SELECT ID1, ID2, ID3, FROM DATABASE2) B 
     ON A.ID1=B.ID1 
     WHERE A.ID2 IN (123,1234,12345,123456,456,4567,45678,456789,987,9876,98765,987654) 
     group by A.ID1,A.CONATACTDATE,B.ID3 

ID1被人ID,ID2是接觸與這個人的ID(每個人都接觸至少一次,最多三次)

我將不勝感激!

+0

做一個GROUP BY。通過A.ID1 – jarlh

+0

添加組我不認爲這個信息很重要:它只是所有代碼的一部分,還有就是我加入另一個表:從數據庫1聯接上DATABASE2乙A.id1 = B.id1。那麼如何在這種情況下使用group? – rocks

+0

(或自左聯接) –

回答

2

使用group bymax可以做到這一點:

....  
     A.id1, 
     Max(CASE 
      WHEN A.id2 IN (123, 1234, 12345, 123456) THEN A.contactdate 
      END) AS DATE_1, 
     Max(CASE 
      WHEN A.id2 IN (456, 4567, 45678, 456789) THEN A.contactdate 
      END) AS DATA_2, 
     Max(CASE 
      WHEN a.Id2 (987, 9876, 98765, 987654) THEN A.contactdate 
      END) AS DATA_3 
FROM database1 A 
JOIN some table or something else 
GROUP BY A.id1 -- this is the last line. 
+0

我不認爲這個信息是重要的:它只是所有代碼的一部分,還有另一個我加入的表:從database1在A.id1 = B.id1上加入數據庫2 B.那麼如何在這種情況下使用group?對不起我的英語! –

+0

@ A.Kier'GROUP BY A.id1'並用'max'包裝'case when'子句。 – Blank

+0

我在第二張表(數據庫2) –

0

你永遠無法得到這樣的輸出(按你的條件):

這是例子: 正如你在的情況下使用ID2聲明。如單排ID2只能有一個值。因此,如果值是(123,1234,12345,123456)那麼只有你的第一個case語句獲取一擊,其他兩個case語句失敗,因此DATE_2DATE_3設置爲NULL,造成類似。

ID1 /// DATE_1 /// DATE_2  /// DATE_3 

99999 ///12-08-2016 

簡單地說只有你的case語句的人寫這樣的方式只有一個會得到擊中,其餘的兩個人返回NULL對於任何行