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更新了我的答案,请检查。