Показать отдельные итоги на основе номера и даты - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть следующие результаты с моим запросом:

Current Results

Пример данных выше:

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

По причинам конфиденциальности, я не могу поделиться своим запросом, однако,

Как можно изменить эти результаты, чтобы выглядеть так:

Expected Results

Как видно из моих ожидаемых результатов, мне нужно только общее время, потраченное и выставленное за дату.

Проблема, с которой я столкнулся, заключается в том, что этот результат используется в сводной таблице в Excel, в результате чего двойные значения размышлять.

Пожалуйста, помогите?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

Полагаю, у вас есть какой-то способ идентификации каждой строки, поэтому я добавил и идентификатор столбца в переменную таблицы. Я также оставил значения для вторичных строк как 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
0 голосов
/ 06 февраля 2020

Я не думал, что это сработает, но похоже, что это сработает для этих результатов.

При чем я придумал (не уверен, что это технически правильно), но это работает для меня :

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

...