Je souhaite écrire une requête pour SAP B1 (t-sql) qui répertoriera tous les éléments de revenu et de dépenses par total et mois par mois.Dynamic pivot - comment obtenir des titres de colonne de façon paramétrique?
J'ai réussi à écrire une requête en utilisant PIVOT, mais je ne veux pas que les en-têtes de colonnes soient codés en dur comme: Jan-11, Feb-11, Mar-11 ... Dec-11.
Au contraire, je veux être générés paramétriquement les têtes de colonne, de sorte que si je entrée:
-------------------------------------- Query - Selection Criteria -------------------------------------- Posting Date greater or equal 01.09.10 Posting Date smaller or equal 31.08.11 [OK] [Cancel]
la requête générer les colonnes suivantes:
Sep-10, oct-10, Nov- 10, ..... Aug-11
Je suppose que DYNAMIC PIVOT peut faire l'affaire. Donc, j'ai modifié un SQL obtenu à partir d'un autre forum pour répondre à mon objectif, mais cela ne fonctionne pas. Le message d'erreur que je reçois est Incorrect Syntax near 20100901
.
Quelqu'un pourrait m'aider à localiser mon erreur?
Note: Dans SAP B1, '[% 1]' est une variable d'entrée
Voilà ma question:
/*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)
Salut Luke, Merci pour votre réponse. –
Salut Luke, Merci pour votre réponse. Malheureusement, cela ne résout pas mon problème. Je réalise que la solution va être très difficile. Heureusement, j'ai trouvé cet article utile: http://www.simple-talk.com/community/blogs/andras/archive/2007/09/14/37265.aspx Je dois maintenant travailler dur pour adapter ces idées à mon problème. Cordialement Leon Lai –