oracle中单行多行

multiple lines in a single line in oracle

我有这个 Select :

Select CASE WHEN tab1.type = 'aaa' THEN tab1.price ELSE 0 END col1,
       CASE WHEN tab1.type = 'bbb' THEN tab1.price ELSE 0 END col2,
       CASE WHEN tab1.type = 'ccc' THEN tab1.price ELSE 0 END col3,
       CASE WHEN tab1.type = 'ddd'  THEN tab1.price ELSE 0 END col4
       FROM tab1
       INNER JOIN tab2
       ON tab1.id = tab2.id_fruits

给出这个结果

col1      col2         col3    col4
20          0            0       0
0          40            0       0
0           0           60       0

有没有可能

col1      col2         col3    col4
20         40            60      0

我想要一行为每一列取一个不为零的值,如果所有值都是零,我取一个零 感谢

如果您只想要不同于 0 的最大一个,请使用 MAX

如果您想要一个代表所有不同于 0 的数字,您可以在每个 SELECT 语句上使用 SUM

Returns the sum of all the values, or only the DISTINCT values, in the expression. SUM can be used with numeric columns only. Null values are ignored.

这是一种方式:

SELECT MAX(CASE WHEN tab1.type = 'aaa' THEN tab1.price ELSE 0 END) col1,
       MAX(CASE WHEN tab1.type = 'bbb' THEN tab1.price ELSE 0 END) col2,
       MAX(CASE WHEN tab1.type = 'ccc' THEN tab1.price ELSE 0 END) col3,
       MAX(CASE WHEN tab1.type = 'ddd' THEN tab1.price ELSE 0 END) col4
FROM tab1
INNER JOIN tab2
  ON tab1.id = tab2.id_fruits