更改sql查询结果的位置

时间:2014-10-30 16:42:30

标签: sql tsql group-by case

标题不是我的问题,但这是我可以描述的方式。

我有一个返回以下结果的查询:

enter image description here

我想知道是否有一种方法可以将行数从三个减少到一个,所有三个都没有空值(一行400,1000和21820),并以宴会作为描述。

感谢您的阅读。

PS:这只是对部分查询结果的捕获,并且有很多重复的行。我可以发布我的查询,如果它会有所帮助。我在那里使用了一些精选案例..

编辑:

谢谢你们,但我通过将主要查询的结果复制到另一个的输入并添加distinct和sum子句来解决这个问题

2 个答案:

答案 0 :(得分:1)

SELECT description, MAX(number1) AS number1, MAX(number2) AS number2)
FROM myTable
GROUP BY description

答案 1 :(得分:0)

最后在Oracle中,您可以使用“When” 例如:

SELECT 
DESCRIPTION,
CASE WHEN SUMPRICE1 IS NULL THEN
    CASE WHEN SUMPRICE2 IS NULL THEN
        CASE WHEN SUMPRICE3 IS NULL THEN
            0
        ELSE SUMPRICE3 END
    ELSE SUMPRICE2 END
ELSE SUMPRICE1 END AS SUMPRICE
FROM MY_TABLE
GROUP BY DESCRIPTION, SUMPRICE

当然,如果您有静态列数,这是可用的。

编辑:我认为我没有遇到问题,但是,如果您不想合并列,可以使用:

SELECT DESCRIPTION,
MAX(SUMPRICE1) AS SUMPRICE1,
MAX(SUMPRICE2) AS SUMPRICE2,
MAX(SUMPRICEN) AS SUMPRICEN
FROM MY_TABLE
GROUP BY DESCRIPTION

或者您可以使用大小写来避免null,在任何行没有值的情况下:

SELECT DESCRIPTION,
CASE WHEN MAX(SUMPRICE1) IS NULL THEN 0 ELSE WHEN MAX(SUMPRICE1) END AS SUMPRICE1,
CASE WHEN MAX(SUMPRICE2) IS NULL THEN 0 ELSE WHEN MAX(SUMPRICE2) END AS SUMPRICE2,
CASE WHEN MAX(SUMPRICEN) IS NULL THEN 0 ELSE WHEN MAX(SUMPRICEN) END AS SUMPRICEN
FROM MY_TABLE
GROUP BY DESCRIPTION