iT邦幫忙

1

MS SQL PIVOT 語法錯誤

Hi 各位前輩好,想要請問我GOOGLE了一下網路有關MS SQL的PIVOT用法 , 想要動態的產生行轉列的Header , 所以我把範例的--[zh-TW], [zh-CN], [en-US]
改為
SELECT distinct l.LangType
FROM dbo.Lang l
就會變成語法錯誤,請問各位要如何修正SQL呢?

SELECT *
FROM (
SELECT l.MasterLangId, l.LangType, l.ShowText
FROM dbo.Lang l
) t
PIVOT (
-- 設定彙總欄位及方式
MAX(ShowText)
-- 設定轉置欄位,並指定轉置欄位中需彙總的條件值作為新欄位
FOR LangType IN
(
--[zh-TW], [zh-CN], [en-US]
SELECT distinct l.LangType
FROM dbo.Lang l
)
) p;

看更多先前的討論...收起先前的討論...
自回此題 , 我使用了 T-SQL , 把全部SQL組成之後再執行就可以了,感覺很怪
假設我T-SQL可以執行的話,我要怎麼Create一個View , 讓此結果可以隨時查詢呢?

DECLARE @ColumnGroup NVARCHAR(MAX), @PivotSQL NVARCHAR(MAX)

SELECT @ColumnGroup = COALESCE(@ColumnGroup + ',' ,'' ) + QUOTENAME(LangType)
FROM dbo.Lang l
where 1=1
GROUP BY QUOTENAME(LangType)

SELECT @PivotSQL =
N'SELECT *
FROM (
SELECT l.MasterLangId, l.LangType, l.ShowText
FROM dbo.Lang l
where 1=1
) t
PIVOT (
MAX(ShowText)
FOR LangType
IN (' + @ColumnGroup + N') ) as p'


EXEC sp_executesql @PivotSQL;
GO
克理獅 iT邦新手 4 級 ‧ 2019-09-24 17:28:06 檢舉
因為pivot 不支援動態欄位,一定要直接用字串定義好欄位才行
石頭 iT邦研究生 2 級 ‧ 2019-09-24 19:37:51 檢舉
請查詢 sql server dynamic pivot
石頭 iT邦研究生 2 級 ‧ 2019-09-24 19:38:56 檢舉
https://stackoverflow.com/questions/10404348/sql-server-dynamic-pivot-query

1 個回答

1
尼克
iT邦高手 1 級 ‧ 2019-09-24 17:35:39

TEST

我要發表回答

立即登入回答