我喜欢下面的oracle表中的数据。
ID SEQ PROD_ID EXPIRE_DATE
849123 134228 MZ321 12/03/2011 12:19:11
849123 434128 MZ328 18/04/2012 12:09:11
849123 424128 MZ326 16/02/2017 11:19:11
849123 431128 MZ323 15/06/2012 12:29:11
443121 133228 MZ321 12/03/2011 12:39:16
443121 234128 MZ328 13/04/2012 12:40:19
443121 424828 MZ326 19/02/2017 11:42:12
443121 731129 MZ323 14/06/2012 12:45:19
我想编写sql语句以获取以下格式的数据。
第一列应具有ID。
第二列的EXPIRE_DATE为PROD_ID MZ321。
第三列的EXPIRE_DATE应该为PROD_ID MZ326。
第四列应具有PROD_ID MZ321的SEQ。
第五列应具有PROD_ID MZ326的SEQ。
样本O / P
ID MZ321_EXPDATE MZ326_EXPDATE MZ321_SEQ MZ326_SEQ
849123 12/03/2011 12:19:11 16/02/2017 11:19:11 134228 424128
443121 12/03/2011 12:39:16 19/02/2017 11:42:12 133228 424828
答案 0 :(得分:1)
我只会使用条件聚合:
select id,
max(case when PROD_ID = 'MZ321' then expire_date end) as MZ321_EXPDATE,
max(case when PROD_ID = 'MZ326' then expire_date end) as MZ326_EXPDATE,
max(case when PROD_ID = 'MZ321' then seq end) as MZ321_seq,
max(case when PROD_ID = 'MZ326' then seq end) as MZ326_seq
from t
group by id;
答案 1 :(得分:0)
首先,结果应按ID分组。
似乎没有必要将{strong> second 和 third 列的值限制为{{ 1}}和MZ321
的{{1}} s。由于如果您确定MZ326
列的 最小 和 最大 值,则可以直接获得PROD_ID
和expire_date
列的相应值直接如下:
EXPDATE