将单行多列转换为多行单列

时间:2017-03-19 16:09:29

标签: sql sql-server

我在sql server中有一个表值函数,它返回多行和单列,如下面的

1
2
3

我使用语法select * from dbo.function在我的查询的 where子句中使用此函数返回的值。

现在除了函数返回的值之外,我想将某些硬编码值放在 where子句中。

例如:

Select * from dbo.table where ID in (Select * from dbo.function + **I want to add some more values here**)

因此,如果函数返回

1
2
3

我想添加让我们说

4
5

在该列表中,使得最终查询变为如下:

select * from dbo.table where ID in (1,2,3,4,5)

1 个答案:

答案 0 :(得分:2)

使用or

Select *
from dbo.table
where ID in (Select * from dbo.function) or
      ID in (4, 5)

虽然你可以使用union all来破坏子查询,但上面的查询更容易理解(在我看来)。此外,如果“function”实际上是一个表,优化器更容易识别适当的索引。