SQL 查询 - 多列合并为一列

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

What I Want it to look like

ColumnX  |
1
2
3 
Active
10
11
12
Active

感谢您的帮助,希望这些内容对您有所帮助。 :)
祝好, 迈克尔

1
这是一个不好的想法。如果没有键,你将不知道这些值代表什么。你将没有排序顺序。 - Isaac Fife
1
我很好奇你想用这个查询做什么。也许有更好的方法来实现你的目标。 - Jim
谢谢你的快速回复。我只是想要获取一个“活动”的数字列表,无论它们来自哪里都没关系。等我回到办公桌前,我会尝试下面的方法! - Mikey
以下是,UNIONALL方法非常有效!感谢大家的帮助! - Mikey
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将在一个列中提供值列表,然后在另一列中提供它来自哪个列。

UNPIVOT所需的是所有字段必须是相同的数据类型,因此您需要进行数据类型转换,以便它们可以呈现在同一列中。

您还可以使用 UNION 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


当然,但是你已经回滚了它。 :-) - Aaron Bertrand
@AaronBertrand 我想是因为当你也在编辑时,我正在编辑它。这就是为什么我们需要在编辑时锁定帖子的原因。 :) - Taryn

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接