Sql 一行中条件很少的情况

Sql 一行中条件很少的情况,sql,oracle,Sql,Oracle,新编辑 我想得到这样的东西: 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

新编辑

我想得到这样的东西:

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(每个人至少联系一次,最多联系三次)


我会感谢你的帮助

使用
group by
max
可以实现:

....       
       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.

您永远无法获得此类输出(根据您的条件):

下面是一个例子: 当您在case语句中使用
ID2
时。正如在单行中一样,
ID2
只能有一个值。因此,如果该值位于
(123123123412345123456)
中,则只有第一个
case
语句命中,其他两个case语句失败,因此
DATE\u 2
DATE\u 3
被设置为
NULL
,导致类似的结果

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

99999  ///12-08-2016   

简单地说,只有您的case语句是以这样的方式编写的:只有一个语句会被命中,另外两个语句会对任何行返回NULL。(或自左连接)通过A.ID1I添加组我不认为这些信息很重要:它只是所有代码的一部分,我连接了另一个表:从数据库A连接数据库2 B在A.id1=B.id1上。那么,在这种情况下如何使用group by呢?在末尾添加group by A.id1和group by我得到:ORA-00979:不是group by表达式我认为这些信息并不重要:它只是所有代码的一部分,我加入了另一个表:从数据库A加入数据库2 B在A.id1=B.id1上。那么在这种情况下如何使用GROUPBY呢?对不起我的英语@A.Kier
GROUP BY A.id1
并将
case when
子句包装为
max
。我得到一个声明:“这不是表达式GROUP BY”(或者类似的东西,我用我的语言翻译过来),它来自第二个表(数据库2)@A.Kier更新了我的答案,请检查。