oracle中单行中的多行

时间:2015-01-08 19:27:20

标签: sql oracle

我有这个选择:



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

我希望有一行为每个不同于零的列获取单个值,如果所有值都为零,则取零 感谢

2 个答案:

答案 0 :(得分:5)

这将是一种方式:

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

答案 1 :(得分:1)

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

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

  

返回表达式中所有值或仅DISTINCT值的总和。 SUM只能与数字列一起使用。空值被忽略。