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

时间:2009-03-31 16:37:43

标签: sql sql-server sql-server-2005 csv

我有一个包含数据的表格,如下:

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

我想在存储过程中做的是得到如下结果:

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

我意识到它没有价值,但我只想先把这个部分拿出来。

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

使用MS SQL 2005。

3 个答案:

答案 0 :(得分:7)

您在寻找Pivot吗?

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

答案 1 :(得分:0)

您想要字符串连接,还是如上所述的PIVOT? 问题是不明确的,你想要将行值变成列(PIVOT),还是输出?

就像1小时前在MSDN forum上看到的那样 使用FOR XML

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

答案 2 :(得分:-1)

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

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

我认为你过于专注于将存储过程的输出看起来像是要显示它的方式。而是试着找出如何安排数据以方便使用。