Ich versuche, Daten mit UNPIVOT in einer SQL Server 2008 SP3-Datenbank abzurufen, die auf Kompatibilitätsstufe 80 ausgeführt wird. Dies sollte bedeuten, dass UNPIVOT nicht funktioniert, in meinem Fall jedoch unter bestimmten Umständen ...
Werke:
Unabhängige SELECT-Abfrage des Formulars:
SELECT...FROM...UNPIVOT...WHERE...GROUP BY
Funktioniert nicht:
Dieselbe Abfrage in einer LEFT JOIN ()
anderen Tabelle in verschiedenen Datenbanken auf demselben Server. Alles auf Kompatibilitätsstufe 80.
Ich erhalte die übliche Fehlermeldung:
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
Problemumgehungen scheinen umständlich zu sein, und ich möchte, dass diese Abfrage in sich geschlossen und wenn möglich aktualisierbar ist. Es scheint logisch, dass es möglich sein sollte, die Abfrage in einem zu verwenden, wenn ich sie isoliert arbeiten lassen kann JOIN
.
Fragen:
Warum funktioniert das manchmal?
Wie kann ich unter diesen Bedingungen die UNPIVOT
Unterabfrage innerhalb von erreichen JOIN
?
Unpivot-Unterabfrage: (Auf Anfrage ...)
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))