oracle经典sql

//1根据A分组,查B的最大值
select DER_DESIGN_NAME ,max(DER_DESIGN_VERSION) DER_DESIGN_VERSION from bom_function group by DER_DESIGN_NAME
//2根据A分组,查B为最大值的所有C列
select tab.*,bf.RELATED_CAVITY 
from (
select DER_DESIGN_NAME ,max(DER_DESIGN_VERSION) DER_DESIGN_VERSION from bom_function group by DER_DESIGN_NAME
) tab 
left join bom_function bf on bf.DER_DESIGN_NAME = tab.DER_DESIGN_NAME and bf.DER_DESIGN_VERSION = tab.DER_DESIGN_VERSION
//3根据A分组,查B的最大值的所有C列,每组保存一条并将C列数据拼接成字符串
SELECT DER_DESIGN_NAME,DER_DESIGN_VERSION,ListAgg(to_char(RELATED_CAVITY),',') WITHIN GROUP(ORDER BY DER_DESIGN_NAME) AS RELATED_CAVITY 
FROM (
select tab.*,bf.RELATED_CAVITY 
from (
select DER_DESIGN_NAME ,max(DER_DESIGN_VERSION) DER_DESIGN_VERSION from bom_function group by DER_DESIGN_NAME
) tab 
left join bom_function bf on bf.DER_DESIGN_NAME = tab.DER_DESIGN_NAME and bf.DER_DESIGN_VERSION = tab.DER_DESIGN_VERSION
) tab GROUP BY DER_DESIGN_NAME,DER_DESIGN_VERSION
//4连表查询
select bf.PROJECT_NAME,bf.COMPOSITE_NAME,bf.DER_DESIGN_NAME,bf.DER_HARNESSPN,bf.DER_DESIGN_VERSION,bf.PARTPN,tab.RELATED_CAVITY
from bom_function bf 
left join (
SELECT DER_DESIGN_NAME,DER_DESIGN_VERSION,ListAgg(to_char(RELATED_CAVITY),',') WITHIN GROUP(ORDER BY DER_DESIGN_NAME) AS RELATED_CAVITY 
FROM (
select tab.*,bf.RELATED_CAVITY 
from (
select DER_DESIGN_NAME ,max(DER_DESIGN_VERSION) DER_DESIGN_VERSION from bom_function group by DER_DESIGN_NAME
) tab 
left join bom_function bf on bf.DER_DESIGN_NAME = tab.DER_DESIGN_NAME and bf.DER_DESIGN_VERSION = tab.DER_DESIGN_VERSION
) tab GROUP BY DER_DESIGN_NAME,DER_DESIGN_VERSION
) tab on tab.DER_DESIGN_NAME = bf.DER_DESIGN_NAME and tab.DER_DESIGN_VERSION = bf.DER_DESIGN_VERSION
where bf.type_code = 'Pl01'
//5分组后只保留一条数据
select * from (SELECT tab.*,row_number() OVER(PARTITION BY DER_DESIGN_NAME order by DER_DESIGN_VERSION desc) rn 
FROM (
select bf.PROJECT_NAME,bf.COMPOSITE_NAME,bf.DER_DESIGN_NAME,bf.DER_HARNESSPN,bf.DER_DESIGN_VERSION,bf.PARTPN,tab.RELATED_CAVITY
from bom_function bf 
left join (
SELECT DER_DESIGN_NAME,DER_DESIGN_VERSION,ListAgg(to_char(RELATED_CAVITY),',') WITHIN GROUP(ORDER BY DER_DESIGN_NAME) AS RELATED_CAVITY 
FROM (
select tab.*,bf.RELATED_CAVITY 
from (
select DER_DESIGN_NAME ,max(DER_DESIGN_VERSION) DER_DESIGN_VERSION from bom_function group by DER_DESIGN_NAME
) tab 
left join bom_function bf on bf.DER_DESIGN_NAME = tab.DER_DESIGN_NAME and bf.DER_DESIGN_VERSION = tab.DER_DESIGN_VERSION
) tab GROUP BY DER_DESIGN_NAME,DER_DESIGN_VERSION
) tab on tab.DER_DESIGN_NAME = bf.DER_DESIGN_NAME and tab.DER_DESIGN_VERSION = bf.DER_DESIGN_VERSION
where bf.type_code = 'Pl01'
) tab
) t where rn=1
//6连表查询得到最终结果
select tab.*,br.this_cost
from (
select * from (SELECT tab.*,row_number() OVER(PARTITION BY DER_DESIGN_NAME order by DER_DESIGN_VERSION desc) rn 
FROM (
select bf.PROJECT_NAME,bf.COMPOSITE_NAME,bf.DER_DESIGN_NAME,bf.DER_HARNESSPN,bf.DER_DESIGN_VERSION,bf.PARTPN,tab.RELATED_CAVITY
from bom_function bf 
left join (
SELECT DER_DESIGN_NAME,DER_DESIGN_VERSION,ListAgg(to_char(RELATED_CAVITY),',') WITHIN GROUP(ORDER BY DER_DESIGN_NAME) AS RELATED_CAVITY 
FROM (
select tab.*,bf.RELATED_CAVITY 
from (
select DER_DESIGN_NAME ,max(DER_DESIGN_VERSION) DER_DESIGN_VERSION from bom_function group by DER_DESIGN_NAME
) tab 
left join bom_function bf on bf.DER_DESIGN_NAME = tab.DER_DESIGN_NAME and bf.DER_DESIGN_VERSION = tab.DER_DESIGN_VERSION
) tab GROUP BY DER_DESIGN_NAME,DER_DESIGN_VERSION
) tab on tab.DER_DESIGN_NAME = bf.DER_DESIGN_NAME and tab.DER_DESIGN_VERSION = bf.DER_DESIGN_VERSION
where bf.type_code = 'Pl01'
) tab
) t where rn=1
) tab 
left join bom_refreshattr br on tab.partpn = br.partpn

猜你喜欢

转载自blog.csdn.net/tongxin_tongmeng/article/details/80542995