Вы можете использовать условное агрегирование для достижения ваших результатов - если вы хотите полагаться на предположения о форме ваших данных. Это ваши ответы на мои вопросы - что кортеж уникален и что есть только 2 значения статуса. Если у вас есть больше значений состояния (и пахнет, как у вас), вы можете расширить логику
use tempdb;
set nocount on;
go
if object_id('v1') is not null
drop view v1;
if object_id('chglog') is not null
drop table chglog;
go
create table chglog (IdNumber int not null, UpdatedOn date not null, Status varchar(10) not null, UpdatedBy varchar(20) not null
constraint chg_unique unique (IdNumber, Status),
constraint chg_check check (Status in ('Open', 'Closed'))
);
insert chglog(IdNumber, UpdatedOn, Status, UpdatedBy)
values (100001, '20190410', 'Open', 'domain/user'), (100001, '20190413', 'Closed', 'domain/user'),
(9999, '20190401', 'Open', 'zork'),
(99001, '20190402', 'Open', 'bob'),
(99001, '20190402', 'Closed', 'alice')
;
go
-- setup complete, now create a view to do a hard-coded pivot
create view v1 as
select IdNumber,
max(case Status when 'Open' then UpdatedOn else null end) as 'Open',
max(case Status when 'Closed' then UpdatedOn else null end) as 'Closed'
from chglog
group by IdNumber;
go
-- test the view
select * from v1
order by IdNumber;
-- now the query that you wanted to write/use
Select
IdNumber,
case when datediff(day, [Open], Closed) = 0 then N'SAMEDAY' else cast(datediff(day, [Open], Closed) as nvarchar(20)) end as TotalAge
-- datediff(day,Open,SentToCustomer) as Stage1,
-- datediff(day,SentToCustomer,) as Stage2,
from v1
order by IdNumber;
Я укажу, что ваша "таблица" содержала IdNumber, но ваш последний запрос ссылался на QuoteNumber (как и другие столбцы, которые вы не упомянули). Я просто проигнорировал некоторые и угадал некоторые. Это просто поворот в старом стиле на основе жестко закодированных значений. Если вы заранее знаете значения, которые необходимо учитывать при повороте, и знаете, что домен не изменяется (или не заботитесь о других значениях), это будет то, что вы просили.
Вопрос, который вы должны рассмотреть, заключается в том, следует ли вам заботиться о других значениях статуса, которые добавляются через CRM после создания этого представления. Но вы все равно любите стороннее программное обеспечение для отчетов. Инструмент отчетности, который не может использовать ничего, кроме таблицы или представления в качестве источника данных, кажется примитивным (по меньшей мере).