Sto cercando di estrarre i dati utilizzando UNPIVOT su un database SQL Server 2008 SP3 in esecuzione a livello di compatibilità 80. Ciò dovrebbe significare che UNPIVOT non funziona, ma nel mio caso lo fa in determinate circostanze ...
Lavori:
Query SELECT indipendente del modulo:
SELECT...FROM...UNPIVOT...WHERE...GROUP BY
Non funziona:
Stessa query, all'interno di LEFT JOIN ()
altre tabelle su database diversi all'interno dello stesso server. Tutto a livello di compatibilità 80.
Ricevo il solito messaggio di errore:
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
le soluzioni alternative sembrano ingombranti e vorrei che questa query fosse autonoma e aggiornabile se possibile. Sembra logico che se riesco a far funzionare la query in modo isolato, dovrebbe essere possibile usarla in a JOIN
.
Domande:
Perché a volte funziona?
Come posso ottenere la UNPIVOT
sottoquery all'interno di JOIN
queste condizioni?
Sottoprogettazione non pivot: (su richiesta ...)
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))