你需要的是一个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