繁体   English   中英

在 SQL 中将空列与具有值的列合并并合并为一行

[英]Merge columns that are empty with ones with values and merge it into one row in SQL

关于将行合并为一个有很多不同的问题,但是当我使用子 select 查询时,我在下面的示例中找不到一个问题。 我试图与 group by 聚合,但无法使其工作。

对于一个 ID,我在不同的列和行中得到三个结果。 如何通过为每个 ID 选择每列的最大值并放在一行中来组合这些结果?

我当前的代码如下

SELECT MMITNO, (SELECT COFA WHERE ALUN='PCE' and DMCF='2') as EAperCSE, (SELECT COFA WHERE ALUN='PAL' and DMCF='1') as CSEperPAL, (SELECT COFA WHERE ALUN='LAY' and DMCF='1') as CSEperLAY, CSEperPAL/CSEperLAY as LAYperPAL 
FROM MVXJDTA.MITMAS LEFT JOIN MVXJDTA.MITAUN on MUITNO=MMITNO

我目前的结果

在此处输入图像描述

作为第一步,我想要实现的是

MMITNO EAperCSE CSEperPAL CSEperLAY
10445  18       16        4
10446  27       40        

第二步是添加一个计算字段,但是当我这样做时我得到一个错误

MMITNO EAperCSE CSEperPAL CSEperLAY LAYperPAL (calculated column CSEperPal/CSEperLAY)
10445  18       16        4         4
10446  27       40        

任何想法我怎么能做到这一点?

我怀疑你想要条件聚合:

select mmitno, 
    max(case when alun = 'pce' and dmcf = '2' then cofa end) as eapercse, 
    max(case when alun = 'pal' and dmcf = '1' then cofa end) as cseperpal, 
    max(case when alun = 'lay' and dmcf = '1' then cofa end) as cseperlay, 
    max(case when alun = 'pal' and dmcf = '1' then cofa end) / max(case when alun = 'lay' and dmcf = '1' then cofa end) as layperpal 
from mvxjdta.mitmas mm
left join mvxjdta.mitaun ma on muitno = mmitno
group by mmitno

我强烈建议在查询中的所有列名前加上它们所属的表(别名),这样查询就不会模棱两可了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM