是否可以在SQL中将多个常量选择为多个结果集行?

时间:2009-01-20 15:00:25

标签: sql sql-server

我知道我可以“选择5 AS foo”并获得结果集:

  

FOO

     

5

     

(1行)

...有没有办法“SELECT 5,6,7 AS foo”并得到结果集:

  

FOO

     

5

     

6

     

7

     

(3行)

...我很清楚这不是典型的数据库使用情况,任何可以想象的使用方法都可能更适合采用更普通的技术。更多的技术问题。

注意:我知道我可以使用大量的UNION列表 - 我正在尝试寻找别的东西。

4 个答案:

答案 0 :(得分:5)

使用数字表很容易,这是一个例子

select number as foo
 from master..spt_values
where type = 'p'
and number between 5 and 7

或者如果你想在

中使用
select number as foo
 from master..spt_values
where type = 'p'
and number in(5,6,7)

答案 1 :(得分:1)

select foo
from (select 1 as n1, 2 as n2, 3 as n3) bar
unpivot (foo for x in (n1, n2, n3)) baz;

答案 2 :(得分:1)

可以使用这些和其他技术(因为任何接受过数据库开发人员访谈的人都会告诉你)。但是在另一个抽象层中执行此操作通常更容易(并且工具更合适);即您的DAL或更高级别,您将数据视为某种列表。虽然rdbms产品提供了促进因素,但它却是关系概念模型的扭曲。

答案 3 :(得分:1)

只是为了好玩,不会梦想真实地使用它:

WITH numbers AS
(
    SELECT ROW_NUMBER() OVER (ORDER BY name) AS 'RowNumber'
    FROM sys.all_objects
) 
SELECT RowNumber 
FROM numbers 
WHERE RowNumber BETWEEN 5 AND 7;