У меня есть следующий запрос:
DECLARE @cols AS varchar(8000) = ''
DECLARE @selectcols AS varchar(8000) = ''
DECLARE @query AS varchar(8000) = ''
SELECT @cols = @cols + QUOTENAME(Type) + ',' FROM (select distinct [Type] from #temp) as tmp order by Type
SELECT @cols = LEFT(@cols, LEN(@cols) - 1)
SELECT @selectcols = @selectcols + 'ISNULL(' + QUOTENAME(Type) + ',0) as ' + QUOTENAME(Type) +',' FROM (select distinct Type from #temp) as tmp order by Type
SELECT @selectcols = LEFT(@selectcols, LEN(@selectcols) - 1)
SET @query =
'
select
PostDate,
Status,
Account,
' + @selectcols + '
from
#temp
pivot
(
sum(Amount)
for Type in (' + @cols + ')
) p
'
EXECUTE (@query)
Он дает следующие результаты:
Что я 'Однако мне нужно сделать это для всех различных типов, это показать кредиты и дебеты в разных столбцах, то есть тип 1 (кредиты), тип 2 (дебеты), тип 1 (кредиты), тип 2 (дебеты) и т. д.
Я знаю, что мог бы сделать что-то похожее на это:
CASE WHEN amount >= 0 THEN amount
ELSE NULL
END AS debit ,
CASE WHEN amount < 0 THEN amount
ELSE NULL
END AS credit
Но я не уверен, как включить это в стержень. Как это можно сделать?
Тестовые данные
Create Table #temp
(
Type varchar(50),
Amount money,
PostDate varchar(50),
Status varchar(50),
Account varchar(50)
)
insert into #temp
(
Type,
Amount,
PostDate,
Status,
Account
)
select
'Type 1',
'296.60',
'September 2019',
'Current',
'6116'
union all
select
'Type 1',
'-195.51',
'September 2019',
'Former',
'6116'
union all
select
'Type 2',
'150.00',
'September 2019',
'Former',
'6113'
union all
select
'Type 2',
'180.43',
'September 2019',
'Former',
'6113'
union all
select
'Type 2',
'-1860.10',
'September 2019',
'Former',
'6113'
union all
select
'Type 2',
'1644.11',
'September 2019',
'Former',
'6113'
union all
select
'Type 2',
'655.38',
'September 2019',
'Former',
'6113'
union all
select
'Type 2',
'366.42',
'September 2019',
'Current',
'6113'
union all
select
'Type 2',
'-403.92',
'September 2019',
'Former',
'6113'