[英]SQL-Server : How to use pivot table to get the result?
我有下表
DECLARE @sample TABLE
(
ColNam varchar(20),
C1 int
)
INSERT INTO @sample
SELECT 'Admin', 1 UNION ALL
SELECT 'Admin', 4 UNION ALL
SELECT 'Admin', 7 UNION ALL
SELECT 'NUser', 3 UNION ALL
SELECT 'NUser', 6 UNION ALL
SELECT 'NUser', 8
SELECT * FROM @sample
我想獲得以下格式:
Admin | 1 | 4 | 7
NUser | 3 | 6 | 8
All 1,4,7,3,6,8 can be variables .
我可以使用哪種方法獲得該結果? 數據透視表? 哪種方法更好?
請幫我。
提前致謝!
DECLARE @sample TABLE
(
ColNam varchar(20),
C1 int
)
INSERT INTO @sample
SELECT 'Admin', 1 UNION ALL
SELECT 'Admin', 4 UNION ALL
SELECT 'Admin', 7
SELECT *
FROM
(
SELECT ColNam,C1
FROM @sample
) A
PIVOT
(
SUM(C1) FOR C1 IN([1],[4],[7])
) PVT
--OR you might need this
SELECT CAST(ColNam AS VARCHAR(100)) + ' | ' + CAST([1] AS VARCHAR(100) )+ ' | ' + CAST([4] AS VARCHAR(100))+ ' | ' + CAST([7] AS VARCHAR(100))
FROM
(
SELECT ColNam,C1
FROM @sample
) A
PIVOT
(
SUM(C1) FOR C1 IN([1],[4],[7])
) PVT
多謝您的回覆。 我通過以下代碼在解決方案中得到了想要的結果:
-- Create Table
CREATE TABLE tbl_sample (ColNam varchar(20),C1 int)
-- Insert Data
INSERT INTO tbl_sample
SELECT 'Admin', 1 UNION ALL
SELECT 'Admin', 4 UNION ALL
SELECT 'Admin', 7 UNION ALL
SELECT 'NUser', 1 UNION ALL
SELECT 'NUser', 5 UNION ALL
SELECT 'NUser', 4
-- Because my C1 column can be variable so I create dynamic like following
DECLARE @PivotColumnHeaders VARCHAR(MAX)
SELECT @PivotColumnHeaders =
COALESCE(
@PivotColumnHeaders + ',[' + cast(C1 as varchar) + ']',
'[' + cast(C1 as varchar)+ ']'
)
FROM tbl_sample
GROUP BY C1
-- Then Select like following
DECLARE @PivotTableSQL NVARCHAR(MAX)
SET @PivotTableSQL = N'
SELECT *
FROM (
SELECT ColNam,C1
FROM tbl_sample
) AS PivotData
PIVOT (
MAX(C1)
FOR C1 IN (
' + @PivotColumnHeaders + '
)
) AS PivotTable
'
EXECUTE(@PivotTableSQL)
我得到了想要的結果。 再次謝謝大家。
我在SQL中引用了該站點“ 動態數據透視表查詢”
紅人隊
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.