J'essaie d'extraire des données à l'aide d'UNPIVOT sur une base de données SQL Server 2008 SP3 fonctionnant au niveau de compatibilité 80. Cela devrait signifier que UNPIVOT ne fonctionne pas, mais dans mon cas, c'est le cas dans certaines circonstances ...
Travaux:
Requête SELECT indépendante du formulaire:
SELECT...FROM...UNPIVOT...WHERE...GROUP BY
Ne fonctionne pas:
Même requête, dans une LEFT JOIN ()
autre table sur différentes bases de données au sein du même serveur. Le tout au niveau de compatibilité 80.
Je reçois le message d'erreur habituel:
Msg 325, Level 15, State 1, Line 165
Incorrect syntax near 'UNPIVOT'. You may need to set the compatibility level
of the current database to a higher value to enable this feature. See help for
the SET COMPATIBILITY_LEVEL option of ALTER DATABASE.
UNPIVOT
les solutions de contournement semblent lourdes et j'aimerais que cette requête soit autonome et actualisable si possible. Il semble logique que si je peux faire fonctionner la requête de manière isolée, il devrait être possible de l'utiliser dans un fichier JOIN
.
Des questions:
Pourquoi cela fonctionne-t-il parfois?
Comment puis-je réaliser la UNPIVOT
sous-requête à l'intérieur de JOIN
dans ces conditions?
Sous-requête non pivotante: (sur demande ...)
SELECT
YEAR(CAST('1-'+UnPiv.[Date] AS DATE)) "Year",
MONTH(CAST('1-'+UnPiv.[Date] AS DATE)) "Month",
CASE [Channel_Org]
WHEN 'TPR' THEN 'ERP'
ELSE [Channel_Org]
END AS [Channel_Org],
ISNULL(SUM(CASE WHEN [GL Desc] = 'EIP' AND
[OPEX_Group] = 'Postpaid SAC' THEN [Amount] END),0) "Post EIP",
ISNULL(SUM(CASE WHEN [GL Desc] = 'EIP' AND
[OPEX_Group] = 'Prepaid SAC' THEN [Amount] END),0) "Pre EIP",
ISNULL(SUM(CASE WHEN [GL Desc] = 'EIP' AND
[OPEX_Group] = 'SRC' THEN [Amount] END),0) "Upg EIP",
ISNULL(SUM(CASE WHEN [GL Desc] = 'MDF (OEM)' AND
[OPEX_Group] = 'Postpaid SAC' THEN [Amount] END),0) "Post MDF",
ISNULL(SUM(CASE WHEN [GL Desc] = 'MDF (OEM)' AND
[OPEX_Group] = 'Prepaid SAC' THEN [Amount] END),0) "Pre MDF",
ISNULL(SUM(CASE WHEN [GL Desc] = 'MDF (OEM)' AND
[OPEX_Group] = 'SRC' THEN [Amount] END),0) "Upg MDF"
FROM [Channel_Steering].[dbo].[AQ1_OPEX_View]
UNPIVOT (Amount FOR [Date] IN ( [Jan-14],
[Feb-14],
[Mar-14],
[Apr-14],
[May-14],
[Jun-14],
[Jul-14],
[Aug-14],
[Sep-14],
[Oct-14],
[Nov-14],
[Dec-14])) UnPiv
WHERE ( [Channel_Org] IN ('Retail','TPR')
AND
[GL Desc] IN ('MDF (OEM)', 'EIP')
)
GROUP BY
[Channel_Org],
YEAR(CAST('1-'+UnPiv.[Date] AS DATE)),
MONTH(CAST('1-'+UnPiv.[Date] AS DATE))
la source