【问题标题】:changing positions of sql query results改变sql查询结果的位置
【发布时间】:2014-12-26 19:52:33
【问题描述】:

标题并没有说明我的问题,但这就是我可以描述的方式。

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

我想知道是否有一种方法可以将行数从 3 行减少到 1 行,其中所有三个非空​​值(400、1000 和 21820 在一行中)并以宴会为描述。

感谢您的阅读。

PS:这只是部分查询结果的截图,有很多重复的行。如果有帮助,我可以发布我的查询。我在那里使用了一些选择案例..

编辑:

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

【问题讨论】:

    标签: sql tsql group-by case


    【解决方案1】:
    SELECT description, MAX(number1) AS number1, MAX(number2) AS number2)
    FROM myTable
    GROUP BY description
    

    【讨论】:

      【解决方案2】:

      最后在 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
      

      或者您可以使用大小写来避免空值,以防任何行没有值:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-05
        • 1970-01-01
        • 2021-02-11
        • 2020-06-17
        • 1970-01-01
        • 2019-02-19
        相关资源
        最近更新 更多