【问题标题】:Show distinct totals based on Issue & Date根据问题和日期显示不同的总数
【发布时间】:2020-02-06 11:22:58
【问题描述】:

我的查询有以下结果:

以上样本数据:

declare @tbl table (DateOfService date, IssueID int, IssueName varchar(100), AssignedConsultant varchar(30), Activity varchar(100), TimeSpent float, TimeInvoiced float)

insert into @tbl (DateOfService,IssueID,IssueName,AssignedConsultant,Activity,TimeSpent,TimeInvoiced) values ('2019-12-19',10295,'Bin Issue','Doug','Activity Detail 1…',10.25,8)
insert into @tbl (DateOfService,IssueID,IssueName,AssignedConsultant,Activity,TimeSpent,TimeInvoiced) values ('2019-12-19',10295,'Bin Issue','Doug','Activity Detail 2…',10.25,8)
insert into @tbl (DateOfService,IssueID,IssueName,AssignedConsultant,Activity,TimeSpent,TimeInvoiced) values ('2020-01-24',10295,'Bin Issue','Doug','Activity Detail 3…',5.5,4)
insert into @tbl (DateOfService,IssueID,IssueName,AssignedConsultant,Activity,TimeSpent,TimeInvoiced) values ('2020-01-24',10295,'Bin Issue','Doug','Activity Detail 4…',5.5,4)

select
*
from    @tbl

但是,出于保密原因,我无法分享我的查询,

如何将这些结果更改为如下所示:

从我的预期结果可以看出,我只需要每个日期花费的总时间和发票。

我遇到的问题是,这个结果被用于 Excel 中的数据透视,导致双值反映。

请帮忙?

【问题讨论】:

    标签: tsql sql-server-2017


    【解决方案1】:

    我假设您有某种方法可以识别每一行,所以我在表变量中添加了 ID 列。我还将辅助行的值保留为 NULL,因为您不清楚您想要在那里的值。无论如何,这应该适用于表示的数据集:

    declare @tbl table (ID int,DateOfService date, IssueID int, IssueName varchar(100), AssignedConsultant varchar(30), Activity varchar(100), TimeSpent float, TimeInvoiced float)
    
    insert into @tbl (ID,DateOfService,IssueID,IssueName,AssignedConsultant,Activity,TimeSpent,TimeInvoiced) values (1,'2019-12-19',10295,'Bin Issue','Doug','Activity Detail 1…',10.25,8)
    insert into @tbl (ID,DateOfService,IssueID,IssueName,AssignedConsultant,Activity,TimeSpent,TimeInvoiced) values (2,'2019-12-19',10295,'Bin Issue','Doug','Activity Detail 2…',10.25,8)
    insert into @tbl (ID,DateOfService,IssueID,IssueName,AssignedConsultant,Activity,TimeSpent,TimeInvoiced) values (3,'2020-01-24',10295,'Bin Issue','Doug','Activity Detail 3…',5.5,4)
    insert into @tbl (ID,DateOfService,IssueID,IssueName,AssignedConsultant,Activity,TimeSpent,TimeInvoiced) values (4,'2020-01-24',10295,'Bin Issue','Doug','Activity Detail 4…',5.5,4)
    
    
    ;WITH CTE AS (
    SELECT MIN(ID) ID, DateOfService
    FROM @tbl
    GROUP BY DateOfService
    )
    SELECT T1.DateOfService,
            IssueID,
            IssueName,
            AssignedConsultant,
            Activity, 
            CASE WHEN T2.ID IS NULL THEN NULL ELSE T1.TimeSpent END TimeSpent,
            CASE WHEN T2.ID IS NULL THEN NULL ELSE T1.TimeInvoiced END TimeInvoiced
    FROM @tbl T1
    LEFT JOIN CTE T2 on T1.ID = T2.ID
    

    【讨论】:

      【解决方案2】:

      我认为这行不通,但看起来对这些结果有效。

      这是我想出的(不确定它在技术上是否正确),但它对我有用:

      declare @tbl table (DateOfService date, IssueID int, IssueName varchar(100), AssignedConsultant varchar(30), Activity varchar(100), TimeSpent float, TimeInvoiced float)
      
      insert into @tbl (DateOfService,IssueID,IssueName,AssignedConsultant,Activity,TimeSpent,TimeInvoiced) values ('2019-12-19',10295,'Bin Issue','Doug','Activity Detail 1…',10.25,8)
      insert into @tbl (DateOfService,IssueID,IssueName,AssignedConsultant,Activity,TimeSpent,TimeInvoiced) values ('2019-12-19',10295,'Bin Issue','Doug','Activity Detail 2…',10.25,8)
      insert into @tbl (DateOfService,IssueID,IssueName,AssignedConsultant,Activity,TimeSpent,TimeInvoiced) values ('2020-01-24',10295,'Bin Issue','Doug','Activity Detail 3…',5.5,4)
      insert into @tbl (DateOfService,IssueID,IssueName,AssignedConsultant,Activity,TimeSpent,TimeInvoiced) values ('2020-01-24',10295,'Bin Issue','Doug','Activity Detail 4…',5.5,4)
      
      select
          DateOfService
      ,   IssueID
      ,   IssueName
      ,   AssignedConsultant
      ,   Activity
      ,   case when lag(TimeSpent) over (order by IssueName) = TimeSpent then 0 else TimeSpent end            TimeSpent
      ,   case when lag(TimeInvoiced) over (order by IssueName) = TimeInvoiced then 0 else TimeInvoiced end   TimeInvoiced
      from    @tbl
      

      db<>fiddle查看结果

      【讨论】:

        猜你喜欢
        • 2012-07-14
        • 2022-01-03
        • 2011-04-18
        • 1970-01-01
        • 2016-11-09
        • 2022-06-13
        • 2023-03-23
        • 2020-11-14
        • 1970-01-01
        相关资源
        最近更新 更多