У меня есть запрос SQL ниже:
create table #temp
(
Account varchar(5),
category varchar(6),
amount money
)
insert into #temp values ('A001', 'ABC-CO', 1000.00)
insert into #temp values ('A002', 'DEF-CR', 500.00)
insert into #temp values ('A002', 'GHI-PR', 800.00)
insert into #temp values ('A003', 'DEF', 700.00)
insert into #temp values ('A004', 'ABC-PR', 1100.00)
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(REPLACE(REPLACE(REPLACE(c.category, '-PR',''),'-
CO',''),'-CR',''))
FROM #temp c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT Account, ' + @cols + ', (case when DEF is not NULL and GHI is not NULL then 1
when ABC is not NULL then 1
else 0 end) as Outcome from
(
select Account
, amount
, REPLACE(REPLACE(REPLACE(category, ''-PR'',''''),''-CO'',''''),''-CR'','''') as
category
from #temp
) x
pivot
(
max(amount)
for category in (' + @cols + ')
) p '
execute(@query)
drop table #temp
, который генерирует приведенную ниже таблицу:
Account ABC DEF GHI Outcome
A001 1000.00 NULL NULL 1
A002 NULL 500.00 800.00 1
A003 NULL 700.00 NULL 0
A004 1100.00 NULL NULL 1
Моя проблема заключается в том, что оператор case построен на известной взаимосвязи, где некоторые столбцы не отображаются в запросе.
Например, если я добавил к выражению case:
case when DEF is not NULL and JKL is not NULL then 1
Желаемый вывод - поскольку JKL не существует, то 0.
Так как JKL не ' Тем не менее, существуют ошибки запроса. Как я могу отредактировать приведенный выше код для просмотра таблицы для столбца JKL, если он не существует, затем добавить столбец JKL со значениями NULL, а затем ссылаться в операторе case?