Я попробовал приведенный ниже код и получил желаемые результаты. Но я не знаю, как создать хранимую процедуру из кода. Код содержит временную таблицу для получения столбцов в наборе данных SSRS.
select odf.DEFINITION_NAME as Notice,
r_account_type.desc_short as AccountType,
orq.notice_dt as Dt,
orq.context_type as contextType,
orq.context_id as contextID
into #table
from
oc_request orq
inner join oc_document odc on orq.OC_REQUEST_ID = odc.oc_request_id
inner join oc_definition odf on odf.OC_DEFINITION_ID = orq.OC_DEFINITION_ID
inner join Users u on u.user_id = orq.requestor
----Account Context
left join its_account on its_account.account_key = orq.CONTEXT_ID
and orq.CONTEXT_TYPE = 'Account'
left join r_account_type on r_account_type.account_type_key=its_account.account_type_key
------Period Context
left join its_account_period ap on ap.account_period_key = orq.CONTEXT_ID
and orq.CONTEXT_TYPE = 'Period'
left join its_account a on a.account_key=ap.account_key
where 1=1
and orq.notice_dt between (dateadd(yy, datediff(yy, 0, getdate()), 0)) and getdate()
group by orq.notice_dt,r_account_type.desc_short,orq.context_type,odf.DEFINITION_NAME,orq.context_id
DECLARE @cols NVARCHAR (MAX)
SELECT @cols = COALESCE (@cols + ',[' + CONVERT(NVARCHAR,[Dt], 1) + ']',
'[' + CONVERT(NVARCHAR,[Dt], 1) + ']')
FROM (SELECT DISTINCT [Dt] FROM #table) as PV
ORDER BY [Dt] desc
DECLARE @query NVARCHAR(MAX)
SET @query = '
SELECT * FROM
(
select * from #table
) x
PIVOT
(
SUM(contextid)
FOR [Dt] IN (' + @cols + ')
) p
'
EXEC SP_EXECUTESQL @query`
o / p Я получаю вот так
notice accounttype 2/7/20 2/6/20 1/31/20 1/30/20 1/29/20
test Marketing 500 663 898 9900 900
tes1 account 867 800 900 670 980
. .