Я хочу написать запрос для SAP B1 (t-sql), в котором будут перечислены все статьи доходов и расходов по сумме и месяцу за месяцем.
Я успешно написал запрос с использованием PIVOT, но я делаюне хочу, чтобы заголовки столбцов были жестко запрограммированы, как: 11 января, 11 февраля, 11 марта ... 11 декабря.
Скорее, я хочу, чтобы заголовки столбцов генерировались параметрически, чтобы при вводе:
--------------------------------------
Query - Selection Criteria
--------------------------------------
Posting Date greater or equal 01.09.10
Posting Date smaller or equal 31.08.11
[OK] [Cancel]
В запросе будут сгенерированы следующие столбцы:
10 сентября, 10 октября, 10 ноября, ..... 11 августа
Я думаю, что DYNAMIC PIVOT может сделать свое дело.Поэтому я изменил один SQL-запрос, полученный на другом форуме, в соответствии с моими целями, но он не работает.Я получаю сообщение об ошибке: Incorrect Syntax near 20100901
.
Может ли кто-нибудь помочь мне найти мою ошибку?
Примечание. В SAP B1 '[% 1]' является входной переменной
Вот мой запрос:
/*Section 1*/
DECLARE @listCol VARCHAR(2000)
DECLARE @query VARCHAR(4000)
-------------------------------------
/*Section 2*/
SELECT @listCol =
STUFF(
( SELECT DISTINCT '],[' + CONVERT(VARCHAR, MONTH(T0.RefDate), 102)
FROM JDT1
FOR XML PATH(''))
, 1, 2, '') + ']'
------------------------------------
/*Section 3*/
SET @query = '
SELECT * FROM
(
SELECT
T0.Account,
T1.GroupMask,
T1.AcctName,
MONTH(T0.RefDate) as [Month],
(T0.Debit - T0.Credit) as [Amount]
FROM dbo.JDT1 T0
JOIN dbo.OACT T1 ON T0.Account = T1.AcctCode
WHERE
T1.GroupMask IN (4,5,6,7) AND
T0.[Refdate] >= '[%1]' AND
T0.[Refdate] <= '[%2]'
) S
PIVOT
(
Sum(Amount)
FOR [Month] IN ('+@listCol+')
) AS pvt
'
--------------------------------------------
/*Section 4*/
EXECUTE (@query)