我有以下数据
如何将它(使用 SQL Server 2005)转换为以下格式?
我有一个我想出的示例解决方案,但它似乎有点笨拙。可能有味道?
DECLARE @ProductLanguage TABLE
(
[PRODUCT_ID] int
, [LANGUAGE] varchar(50)
)
INSERT INTO @ProductLanguage ([PRODUCT_ID],[LANGUAGE]) VALUES (52035,'Czech')
INSERT INTO @ProductLanguage ([PRODUCT_ID],[LANGUAGE]) VALUES (52035,'English')
INSERT INTO @ProductLanguage ([PRODUCT_ID],[LANGUAGE]) VALUES (52035,'German')
INSERT INTO @ProductLanguage ([PRODUCT_ID],[LANGUAGE]) VALUES (54001,'Danish')
INSERT INTO @ProductLanguage ([PRODUCT_ID],[LANGUAGE]) VALUES (54001,'Spanish')
INSERT INTO @ProductLanguage ([PRODUCT_ID],[LANGUAGE]) VALUES (54001,'English')
INSERT INTO @ProductLanguage ([PRODUCT_ID],[LANGUAGE]) VALUES (70501,'Finnish')
INSERT INTO @ProductLanguage ([PRODUCT_ID],[LANGUAGE]) VALUES (70501,'Greek')
INSERT INTO @ProductLanguage ([PRODUCT_ID],[LANGUAGE]) VALUES (70501,'Hungarian')
INSERT INTO @ProductLanguage ([PRODUCT_ID],[LANGUAGE]) VALUES (52044,'Hebrew')
SELECT
PRODUCT_ID
,MAX(CASE WHEN [ROW_ID]=1 THEN LANGUAGE ELSE NULL END) As LANG_1
,MAX(CASE WHEN [ROW_ID]=2 THEN LANGUAGE ELSE NULL END) As LANG_2
,MAX(CASE WHEN [ROW_ID]=3 THEN LANGUAGE ELSE NULL END) As LANG_3
FROM
(SELECT
ROW_NUMBER() OVER (PARTITION BY [PRODUCT_ID] ORDER BY [PRODUCT_ID] ASC) AS [ROW_ID]
, [PRODUCT_ID]
, [LANGUAGE]
FROM
@ProductLanguage) AS Temp
GROUP BY
[PRODUCT_ID]
有趣的是我不关心每个 LANG_* 列中显示的特定语言。此处发布的其他问题似乎都涉及按名称了解旋转列。但我不想用找到的语言来命名列。
注意:我知道我提到了“pivot”这个词,但这个问题的最佳解决方案可能不涉及 PIVOT 子句。我只是使用了这个词,因为我的问题似乎暗示了数据透视。也许 CTE 会帮助解决问题,我不知道。我只知道我对上面的示例解决方案不满意。