【问题标题】:SQL Query Convert columns to rowsSQL 查询将列转换为行
【发布时间】:2020-09-02 14:00:18
【问题描述】:
select sum(cases) as [Total cases], sum(deaths) as [Total deaths] 
FROM [myschema].[metrics]

我们可以通过pivot/unpivot函数得到吗?

【问题讨论】:

    标签: sql sum pivot unpivot


    【解决方案1】:

    您也可以使用 UNPIVOT 来获得所需的结果:

       SELECT
        *
    FROM
        (
            SELECT
                SUM(cases)      AS total_cases,
                SUM(deaths)     AS total_deaths
            FROM
                myschema.metrics
        ) UNPIVOT ( value
            FOR category
        IN ( total_cases,
             total_deaths ) );
         
    

    上面的输出将是:

    Category                Value
    Total_cases             1234
    Total_deaths            123
    

    【讨论】:

      【解决方案2】:

      使用union all:

      select 'total cases' info, sum(cases) cnt from metrics
      union all select 'total deaths', sum(deaths) from metrics
      

      或者,如果您的数据库支持横向连接:

      select x.info, sum(x.cnt) cnt
      from metrics m
      cross join lateral (values ('total cases', m.cases), ('total deaths', m.deaths)) as x(info, cnt)
      group by x.info
      

      【讨论】:

      • 为什么这篇文章在没有响应指南的情况下得到了答案?
      【解决方案3】:

      最简单的通用方式是union all

      select 'Total Cases'  as which, sum(cases) 
      from [myschema].[metrics]
      union all
      select 'Total Deaths' as which, sum(deaths)
      from [myschema].[metrics];
      

      方括号看起来像 SQL Server。在这种情况下,我建议使用横向连接:

      select v.*
      from (select sum(cases) as TotalCases, sum(deaths) as TotalDeaths 
            from [myschema].[metrics]
           ) m cross apply
           (values ('TotalCases', TotalCases), ('TotalDeaths', TotalDeaths)
           ) v(which, cnt);
      

      这只会读取一次表格。如果该表确实是一个更复杂的查询(例如视图或 CTE),则性能提升可能非常可观。

      【讨论】:

      • 为什么这篇文章在没有回应指南的情况下得到了答案?
      • @SandraGuilepZouaouiZandeh。 . .回答的人似乎很清楚这个问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多