你需要的是一個PIVOT查詢。根據您的數據集中有多少個名稱,以及您是否提前知道它們,您可能需要一個「動態數據透視表」。
樞軸查詢可能有點混亂。但是,這裏有兩個如何構建動態數據透視查詢的例子。 (注:第二個是另一個堆棧溢出問題,可能是您的情況比第一次更好。)
T-SQL: Dynamic Pivot on Multiple Columns
T-SQL dynamic pivot
編輯:具體實例......
-- DROP TABLE #MyTable
-- CREATE TABLE #MyTable(name varchar(10), ID int, value int);
INSERT #MyTable VALUES ('Sam', 1, 15);
INSERT #MyTable VALUES ('Sam', 2, 6);
INSERT #MyTable VALUES ('Bob', 1, 9);
INSERT #MyTable VALUES ('Bob', 2, 11);
-- INSERT #MyTable VALUES ('Sam', 3, 1);
-- INSERT #MyTable VALUES ('Bob', 3, 2);
DECLARE @cols NVARCHAR(2000)
DECLARE @query NVARCHAR(4000)
SELECT @cols = STUFF((SELECT DISTINCT TOP 100 PERCENT
'],[' + CONVERT(varchar(5), t.ID)
FROM #MyTable AS t
--ORDER BY '],[' + t.ID
FOR XML PATH('')
), 1, 2, '') + ']'
--SELECT @cols
SET @query = N'SELECT name,'+ @cols +' FROM
(SELECT t1.name, t1.ID, t1.Value FROM #MyTable AS t1) p
PIVOT (MAX([Value]) FOR ID IN ('+ @cols +'))
AS pvt;'
EXECUTE(@query)
您需要重寫此查詢以添加/刪除聯合操作,具體取決於您與每個名稱關聯的值的數量。我認爲這個解決方案對整個問題來說將是一個更加健全的解決方案,儘管這個解決方案對於提供的具體示例來說足夠好。 – DeadZone
我同意'PIVOT'是一個更合適的解決方案,但是當只有兩個值時(如OP所指出的那樣),那麼這將更快地執行。 –
實際上,OP指出:「對於呈現的數據,ID的數量可能會有所不同」,但是本例中「每個名稱只有2個值。「 – DeadZone