0
我希望爲SAP B1(t-sql)編寫一個查詢,它將按月和月份列出所有收入和費用項目。動態數據透視表 - 如何以參數方式獲取列標題?
我已經成功地使用PIVOT編寫了一個查詢,但我不希望列標題像以下硬編碼:1月11日,2月11日,3月11日... 12月11日。
而是我想被參數化所產生的列標題,所以,如果我輸入:
-------------------------------------- Query - Selection Criteria -------------------------------------- Posting Date greater or equal 01.09.10 Posting Date smaller or equal 31.08.11 [OK] [Cancel]
查詢將產生以下的列:
月-10,2010年10月,新手覺得10,..... Aug-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 ('[email protected]+')
) AS pvt
'
--------------------------------------------
/*Section 4*/
EXECUTE (@query)
嗨盧克,感謝您的回答。 –
Hi Luke,謝謝你的回答。不幸的是,它不能解決我的問題。我意識到解決方案將會非常困難。幸運的是,我找到了這篇有用的文章:http://www.simple-talk.com/community/blogs/andras/archive/2007/09/14/37265.aspx我現在必須努力工作,以便將這些想法適應於我的問題。最好的問候萊昂 –