各位大神,求助一个问题:
两个表:
主表 TAB_MAIN 数据如下
MAIN_ID COL_DE_ASSOR COL_OE_ASSOR
10011 DE_ASSOR1 OE_ASSOR1
10022 DE_ASSOR2 OE_ASSOR2
10033 DE_ASSOR3 OE_ASSOR3
10044 DE_ASSOR4 OE_ASSOR4
有两种 ASSOR DE和 OE 存储在此表中
属性表: TAB_FCAA
FCAA_ID IND_FLAG col_comm
10011 1 comment_111
10011 0 comment_112
10022 1 comment_221
10022 0 comment_222
10033 1 comment_331
10033 0 comment_332
就是当TAB_FCAA.IND_FLAG =1 时认为 是DE 类型的comment,
当 TAB_FCAA.IND_FLAG =0 时认为 是OE 类型的comment,
现在本人这样写的SQL:
select ditstinct
MAIN_ID,
COL_DE_ASSOR,
COL_OE_ASSOR,
case when IND_FLAG=1 then col_comm end as de_com,
case when IND_FLAG=0 then col_comm end as oe_com
from TAB_MAIN
left join TAB_FCAA on TAB_MAIN.MAIN_ID=TAB_FCAA.FCAA_ID
这样一来结果就会出现多行数据:
MAIN_ID COL_DE_ASSOR COL_OE_ASSOR de_com oe_com
10011 DE_ASSOR1 OE_ASSOR1 comment_111
10011 DE_ASSOR1 OE_ASSOR1 comment_112
10022 DE_ASSOR2 OE_ASSOR2 comment_221
10022 DE_ASSOR2 OE_ASSOR2 comment_222
10033 DE_ASSOR3 OE_ASSOR3 comment_331
10033 DE_ASSOR3 OE_ASSOR3 comment_332
10044 DE_ASSOR4 OE_ASSOR4
能否把DE 或者OE 类型的ASSOR 和comment 对应 在一行中 不需要出现上面多行的情况?
不知描述的清楚吗?
因本人现在没法拿到真实数据,印象大致如此, 故求助,谢谢大神们,分不多了,请海涵。
------解决思路----------------------
上面漏写了MAIN_ID的表名,修正下
select TAB_MAIN.MAIN_ID,
MAX(COL_DE_ASSOR) AS COL_DE_ASSOR,
MAX(COL_OE_ASSOR) AS COL_OE_ASSOR,
MAX(case when IND_FLAG=1 then col_comm end) as de_com,
MAX(case when IND_FLAG=0 then col_comm end) as oe_com
from TAB_MAIN
left join TAB_FCAA on TAB_MAIN.MAIN_ID=TAB_FCAA.FCAA_ID
GROUP BY TAB_MAIN.MAIN_ID
------解决思路----------------------
select distinct main_id,
COL_DE_ASSOR,
COL_OE_ASSOR,
(select col_comm
from TAB_FCAA t2
where t1.main_id = t2.fcaa_id
and t2.ind_flag = 1) de_com,
(select col_comm
from TAB_FCAA t2
where t1.main_id = t2.fcaa_id
and t2.ind_flag = 0) oe_com
from TAB_MAIN t1
------解决思路----------------------
select distinct
MAIN_ID,
COL_DE_ASSOR,
COL_OE_ASSOR,
de.col_comm as de_com,
oe.col_comm as oe_com
from TAB_MAIN
left join TAB_FCAA de
on TAB_MAIN.MAIN_ID = de.FCAA_ID
AND de.IND_FLAG=1
left join TAB_FCAA oe
on TAB_MAIN.MAIN_ID = oe.FCAA_ID
AND oe.IND_FLAG=0