2011-10-16 58 views
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) 

回答

0

我不知道SAP,但幾件事情映入腦海:

  • 它看起來像你想@listCol包含方括號內的數字集合,例如[07],[08],[09]...。但是,您的代碼似乎不會在該字符串的開頭放置[

  • 嘗試

    T0.[Refdate] >= ''[%1]'' AND 
    T0.[Refdate] <= ''[%2]'' 
    

更換線

T0.[Refdate] >= '[%1]' AND 
T0.[Refdate] <= '[%2]' 

(我也在第一這兩行的AND前添加一個空格,而我是編輯你的問題。 )

+0

嗨盧克,感謝您的回答。 –

+0

Hi Luke,謝謝你的回答。不幸的是,它不能解決我的問題。我意識到解決方案將會非常困難。幸運的是,我找到了這篇有用的文章:http://www.simple-talk.com/community/blogs/andras/archive/2007/09/14/37265.aspx我現在必須努力工作,以便將這些想法適應於我的問題。最好的問候萊昂 –