我的查询结果如下:
上述样本数据:
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中的透视图中被使用,导致双精度值出现。
请协助?
答案 0 :(得分:0)
我认为这行不通,但是看起来可以满足这些结果。
我想出了什么(不确定它在技术上是否正确),但是对我有用:
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
中查看结果
答案 1 :(得分:0)
我假设您有某种识别每一行的方法,所以我在表变量中添加了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