Tôi đang cố gắng kéo dữ liệu bằng UNPIVOT trên cơ sở dữ liệu SP3 của SQL Server 2008 chạy ở cấp độ tương thích 80. Điều này có nghĩa là UNPIVOT không hoạt động, nhưng trong trường hợp của tôi, nó thực hiện trong một số trường hợp nhất định ...
Làm:
Truy vấn CHỌN độc lập có dạng:
SELECT...FROM...UNPIVOT...WHERE...GROUP BY
Không hoạt động:
Cùng một truy vấn, trong một LEFT JOIN ()
bảng trên các cơ sở dữ liệu khác nhau trong cùng một máy chủ. Tất cả ở mức độ tương thích 80.
Tôi nhận được thông báo lỗi thông thường:
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
cách giải quyết có vẻ rườm rà và tôi muốn truy vấn này được khép kín và làm mới nếu có thể. Có vẻ hợp lý rằng nếu tôi có thể làm cho truy vấn hoạt động một cách cô lập, thì có thể sử dụng nó trong a JOIN
.
Câu hỏi:
Tại sao điều này đôi khi làm việc?
Làm thế nào tôi có thể đạt được UNPIVOT
truy vấn phụ bên trong trong JOIN
các điều kiện này?
Truy vấn phụ không theo trục: (Theo yêu cầu ...)
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))