如何使用存储过程从行中选择数据并将其显示为列?

Asked
Viewd3326

2

我有一个表,里面有数据,

 Cars:
id | name
----------
1  | Buick
2  | Honda
3  | Toyota
 

我想在存储过程中做的就是得到这样的结果:

 Temp Table:
Buick | Honda | Toyota
----------------------
 

我意识到它没有任何价值,但我只想首先获得这一部分。

我猜这将涉及某种临时表。

使用MS SQL 2005。

  • 那么您想要做的就是获取不同汽车的名称,并将它们自己命名为列名称?

    TStamperMarch 31, 2009 16:45

3 个答案

-1

您可以创建一个临时表,然后为从Cars表中选择的内容创建一个游标,并为每行动态创建并执行一个SQL查询,该查询将一个字段添加到临时表中。

但是您为什么要尝试做这样的事情?您正在将数据与元数据混合在一起,这绝不是一个好主意。用数据填充临时表的代码甚至比创建临时表的代码还要糟糕。

我认为您过多地专注于从存储过程中获取输出,以至于看起来像如何显示它。相反,请尝试弄清楚如何安排数据以便于使用。

  • 为什么要投票?如果您(任何人)不发表评论解释原因,那将毫无意义。

    GuffaMarch 31, 2009 17:08
7

您是否在寻找枢纽

这是一个基于您的示例修改的MSDN示例的示例(略作设计):

 SELECT 'Count' AS Header,
    [Toyota], [Buick], [Honda]
FROM (SELECT id, Name FROM Cars) AS SourceTable
    PIVOT( COUNT(ID) FOR Name IN ([Toyota], [Buick], [Honda])) AS PivotTable
 
  • 如果只有3列3行,则此方法有效。 对于真正的行到列的转换,您只有动态SQL或在客户端代码中完成

    gbnMarch 31, 2009 17:16
0

您要字符串连接,还是上面建议的PIVOT? 问题是模棱两可的,您希望将行值转换为列(PIVOT)还是输出?

就像1小时前在 MSDN论坛 使用FOR XML

 SELECT 
STUFF(
(
SELECT ' ' + name
FROM @table
FOR XML PATH('')
), 1, 1, '') as concatenated_string