【问题标题】:Need to align as one row SQL需要对齐为一行 SQL
【发布时间】:2018-08-07 19:31:17
【问题描述】:

我有一些数据试图对齐为一行而不是两行。 例如我得到了什么

Name     Feb         Mar 
Tom    $229.32   NULL 
Tom     NULL     $182.63 

下面是我需要的

    Name     Feb          Mar 
    Tom    $229.32    $182.63 

下面是我正在使用的查询

select  Name, 
        case
        when convert(varchar(7), bill_dt, 126) = '2018-02'
        then sum(cast(amount as float))
        end Feb,
        case
        when convert(varchar(7), bill_dt, 126) = '2018-03'
        then sum(cast(amount as float))
        end Mar
from psi.eop_stagging
where bill_dt >= '2018/02/01' and bill_dt < '2018/04/01'
group by Name, bill_dt

【问题讨论】:

    标签: sql-server-2008 reporting-services


    【解决方案1】:

    使用条件聚合:

    select  Name, 
            SUM( case when convert(varchar(7), bill_dt, 126) = '2018-02'
                      then cast(amount as float)
                      else 0
                 end) as Feb,
            SUM( case when convert(varchar(7), bill_dt, 126) = '2018-03'
                      then cast(amount as float)
                      else 0
                 end) as Mar
    from psi.eop_stagging
    where bill_dt >= '2018/02/01' and bill_dt < '2018/04/01'
    group by Name
    

    【讨论】:

    • 结果还是一样。现在它显示 0 而不是 null。但我仍然得到两行而不是一行。
    • 那是因为你group by name, bill_dt。并为每个名称和每个 bill_dt 创建一行,只需删除 bill_dt
    【解决方案2】:

    对于您的数据集,使用将计费日期“减少”到月初的查询(为报告提供分组依据),例如:

    select  
      Name,
      DATEADD(month, DATEDIFF(month, 0, bill_dt), 0) AS bill_mnth,
      amount
    from psi.eop_stagging
    where bill_dt >= '2018/02/01' and bill_dt < '2018/04/01';
    

    您还不必分组,您可以让报告为您执行此操作。并且不要使用任何听起来复杂且以“条件”开头的内容,除非您只想在 2018 年 2 月和 3 月使用您的报告。

    向报表添加矩阵并使用字段选择器进行选择

    • Name 代表
    • bill_mnth 用于
    • amount 代表 数据

    这将创建一个按Name 分组的行组和一个按bill_mnth 分组的列组。为了显示月份的 3 个字母缩写而不是日期,右键单击文本框并将该列标题的 表达式 更改为

    =Format(Fields!bill_mnth.Value, "MMM")
    

    ...如果您打算扩大间隔,甚至可以使用“MMM yyyy”。当然,根据需要格式化数据单元格。

    【讨论】:

      猜你喜欢
      • 2014-04-23
      • 2020-11-22
      • 2014-03-30
      • 1970-01-01
      • 2011-06-23
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多