Saya mencoba untuk menarik data menggunakan UNPIVOT pada database SQL Server 2008 SP3 yang berjalan pada Tingkat Kompatibilitas 80. Ini berarti UNPIVOT tidak berfungsi, tetapi dalam kasus saya itu tidak dalam keadaan tertentu ...
Bekerja:
Permintaan SELECT independen dari formulir:
SELECT...FROM...UNPIVOT...WHERE...GROUP BY
Tidak bekerja:
Kueri yang sama, di dalam LEFT JOIN ()
tabel lain di database berbeda dalam server yang sama. Semua pada tingkat kompatibilitas 80.
Saya mendapatkan pesan kesalahan yang biasa:
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
solusi tampaknya rumit dan saya ingin query ini mandiri dan dapat disegarkan jika memungkinkan. Tampaknya logis bahwa jika saya bisa membuat kueri berfungsi secara terpisah, seharusnya dimungkinkan untuk menggunakannya dalam JOIN
.
Pertanyaan:
Mengapa terkadang ini berhasil?
Bagaimana saya bisa mencapai UNPIVOT
sub-kueri di JOIN
dalam kondisi ini?
Batalkan Sub-Kueri: (Atas permintaan ...)
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))
sumber