Я пытаюсь получить данные с помощью UNPIVOT в базе данных SQL Server 2008 SP3, работающей на уровне совместимости 80. Это должно означать, что UNPIVOT не работает, но в моем случае это происходит при определенных обстоятельствах ...
Работает:
Независимый запрос SELECT формы:
SELECT...FROM...UNPIVOT...WHERE...GROUP BY
Не работает:
Тот же запрос в LEFT JOIN ()
других таблицах в разных базах данных на одном сервере. Все на уровне совместимости 80.
Я получаю обычное сообщение об ошибке:
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
обходные пути кажутся обременительными, и я бы хотел, чтобы этот запрос был автономным и по возможности обновлялся. Кажется логичным, что если я смогу заставить запрос работать изолированно, то можно было бы использовать его в JOIN
.
Вопросов:
Почему это иногда работает?
Как я могу выполнить UNPIVOT
подзапрос внутри в JOIN
этих условиях?
Отключить подзапрос: (по запросу ...)
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))
источник