我有一个包含数据的表格,如下:
Cars:
id | name
----------
1 | Buick
2 | Honda
3 | Toyota
我想在存储过程中做的是得到如下结果:
Temp Table:
Buick | Honda | Toyota
----------------------
我意识到它没有价值,但我只想先把这个部分拿出来。
我猜这会涉及某种临时表。
使用MS SQL 2005。
答案 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查询,该查询将字段添加到临时表中。
但你为什么要这样做呢?您正在将数据与元数据混合,这很少是一个好主意。使用数据填充临时表的代码将比创建它的代码更糟糕。
我认为你过于专注于将存储过程的输出看起来像是要显示它的方式。而是试着找出如何安排数据以方便使用。