【问题标题】:How do I flatten results from my SQL Query?如何展平我的 SQL 查询的结果?
【发布时间】:2015-09-14 00:27:55
【问题描述】:

我有一个返回下表的查询:

年份 已资助 未资助 2003 空 4 2003 3 空 2004 空 2 2004 8 空

所以我需要:

选择年份、已资助、未资助 从 ( --myQuery 返回未展平的结果 )

我每年只需要一排。 喜欢:

年份 已资助 未资助 2003 3 4 2004 8 2

【问题讨论】:

  • 我在这里质疑表格设计。为什么不维护一个布尔列IsFunded 和一个值列QtyAmount?然后根据IsFunded 的真/假有条件地查询Amount 两列。这样可以避免存储 Null 并明确定义列。

标签: sql oracle


【解决方案1】:

使用GROUP BYMAX

SELECT t.Year, MAX(t.IsFunded) AS IsFunded, MAX(t.NotFunded) AS NotFunded
FROM 
(
    --myQuery that returns unflattened results
) AS t
GROUP BY t.Year;

【讨论】:

    【解决方案2】:

    我会将 null 替换为 0 而 sum 并按年添加组,如下所示

               with MyQuery(Year,IsFunded,NotFunded) as (
              select 2003,Null,4 from dual union
              select 2003,3,Null from dual union
              select 2004,Null,2 from dual union
              select 2004,8,Null from dual
              )
              select year,sum(case when IsFunded is null then 0 else IsFunded end) as IsFunded,
              sum(case when NotFunded is null then 0 else NotFunded end) as NotFunded
              from MyQuery group by year
    

    输出

            YEAR ISFUNDED  NOTFUNDED
            2003     3         4
            2004     8         2
    

    【讨论】:

      猜你喜欢
      • 2012-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 2012-09-14
      • 2019-07-07
      • 2019-12-17
      • 2012-10-28
      相关资源
      最近更新 更多