SQL组按条件行

时间:2019-10-16 10:24:40

标签: sql db2 match case

我需要在满足以下条件的情况下将3行合并为一-如果任何一列中至少存在一个J,则所有列均应被J覆盖。如果所有NI都应获得一个包含N的行。 >

我在想-

SELECT BRGNR
, AFTLST
,CASE WHEN EGMK IN ('J','N') THEN 'J' ELSE EGMK END EGMK
,CASE WHEN TDMK IN ('J','N') THEN 'J' ELSE TDMK END TDMK
,CASE WHEN UDMK IN ('J','N') THEN 'J' ELSE UDMK END UDMK
, CASE WHEN FUMK IN ('J','N') THEN 'J' ELSE FUMK END FUMK
  FROM IF.TIF_BRUGER_BT  
GROUP BY BRGNR

但是问题是在这种情况下,当我所有的N都被覆盖时,所有值都将被覆盖为J,如果所有的值均为N,则我必须拥有N。

Original result

1 个答案:

答案 0 :(得分:0)

我将问题解释为:

  • 如果一列中有'J',则结果为'J'
  • 否则,如果全部为'N',则结果为'N'

我将假定唯一的值为'J''N'。我的猜测是'J'->“是”和'N'->“否”,如果任何值为“是”,您都希望“是”。

如果是这样,您可以使用MIN()

SELECT BRGNR, AFTLST,
       MIN(EGMK), MIN(TDMK), MIN(UDMK), MIN(FUMK)
FROM IF.TIF_BRUGER_BT  
GROUP BY BRGNR, AFTLST