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

Sql 如何使用存储过程从行中选择数据并将其显示为列?,sql,sql-server,sql-server-2005,csv,Sql,Sql Server,Sql Server 2005,Csv,我有一个表,其中包含如下数据: Cars: id | name ---------- 1 | Buick 2 | Honda 3 | Toyota 我希望在存储过程中得到如下结果: Temp Table: Buick | Honda | Toyota ---------------------- 我知道它没有价值,但我只想先得到这部分 我猜这会涉及某种临时桌子 使用MS SQL 2005。您在寻找什么 下面是一个基于为您的示例修改的MSDN示例的(稍微做作的)示例: SELECT 'C

我有一个表,其中包含如下数据:

Cars:
id | name
----------
1  | Buick
2  | Honda
3  | Toyota
我希望在存储过程中得到如下结果:

Temp Table:
Buick | Honda | Toyota
----------------------
我知道它没有价值,但我只想先得到这部分

我猜这会涉及某种临时桌子

使用MS SQL 2005。

您在寻找什么

下面是一个基于为您的示例修改的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

您想要字符串连接,还是如上所述的枢轴? 问题不明确,您希望行值转换为列(轴)还是输出

就在一个小时前在电视上读到这个 用于XML

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

您可以创建一个临时表,然后为Cars表中的一个选择创建一个光标,并为每一行动态创建和执行一个SQL查询,向临时表中添加一个字段

但你为什么要这样做?您将数据与元数据混合在一起,这很少是一个好主意。用数据填充临时表的代码将比创建临时表的代码更糟糕


我认为您过于关注从存储过程中获取输出,而没有考虑如何显示它。相反,试着找出数据应该如何安排以便于使用。

所以你要做的是获取不同车辆的名称,并将其转换为自己的列名?为什么要投反对票?如果你(不管是谁)没有留下解释原因的评论,这是毫无意义的。如果你只有3行3列,这是有效的。对于真正的行到列转换,您只能使用动态SQL或在客户机代码中进行转换