3

我在这里和谷歌进行了一次狩猎,但无法找到任何东西。

我确实遇到了 CONCAT 函数,但是当我的公司运行 SQL Server 2008 时,这不是一个选项:(

我有一个输出多列/行的查询,我想在一列中显示所有结果。

例子:

SELECT client, owner, payer, status
FROM Main
WHERE status = 'Active'

结果:

client | owner | payer | status

1      |  2    |  3    | Active
10     |  11   | 12    | Active

我希望它看起来像什么

ColumnX  |
1
2
3 
Active
10
11
12
Active

提前感谢您的帮助,我希望这是有道理的:)

干杯,迈克尔

4

2 回答 2

10

您所指的内容称为UNPIVOT. 这需要列并将它们转换为行:

SELECT value, field
FROM
(
  select cast(client as varchar(10)) client, 
    cast(owner as varchar(10)) owner, 
    cast(payer as varchar(10)) payer, 
    status
  from main
  where status = 'Active'
) x
unpivot
(
  value 
  for field in (client, owner, payer, status)
) u

请参阅带有演示的 SQL Fiddle

UNPIVOT将为您提供一列中的值列表,然后在另一列中提供它来自的列。

an 所需的UNPIVOT是所有字段都具有相同的数据类型,因此您需要执行数据类型的转换,以便它们可以显示在同一列中。

您也可以使用 aUNION ALL来执行此操作,但同样您需要cast()数据类型相同:

SELECT cast(client as varchar(10)) value
FROM main
WHERE status = 'active'
UNION ALL
SELECT cast(owner as varchar(10)) value
FROM main
WHERE status = 'active'
UNION All
SELECT cast(payer as varchar(10)) value
FROM main
WHERE status = 'active'
UNION ALL
SELECT status
FROM main
WHERE status = 'active'

请参阅带有演示的 SQL Fiddle

于 2012-08-24T00:04:14.387 回答
1

你看过 SQL Pivot 吗?http://msdn.microsoft.com/en-us/library/ms177410(v=sql.105).aspx

据我所知,您需要 UnPivot 您的表,这会产生大量堆栈。

于 2012-08-24T00:02:06.570 回答