SQL Server,View使用多个select语句

时间:2010-04-28 19:56:47

标签: sql sql-server tsql views

我已经敲了几个小时,看起来很简单,但是这里有:

我想使用输出Single记录集的多个select语句创建一个视图 例如:

CREATE VIEW dbo.TestDB
AS
SELECT     X AS 'First'
FROM       The_Table
WHERE     The_Value = 'y'

SELECT     X AS 'Second'
FROM       The_Table
WHERE     The_Value = 'z'

我想输出以下记录集:

Column_1 | Column_2
'First'    'Second'

任何帮助将不胜感激! -Thanks。

3 个答案:

答案 0 :(得分:2)

联合可能是您想要的,但请记住,您需要具有完全相同的列,因此您需要为每个选择添加空列。

SELECT     X AS 'First', Null as 'Second'
FROM       The_Table
WHERE     The_Value = 'y'
Union
SELECT     null as 'First', X AS 'Second'
FROM       The_Table
WHERE     The_Value = 'z'

这将结合两个结果,仅为您提供独特的组合。 我的猜测是,这不是你想要的。

是否有理由不能在一个查询中完成此操作或者执行某些子查询? 也许你可以提供一个更具体的例子。

答案 1 :(得分:2)

如果你想要这个:

Column_1 | Column_2
'First'    null
null       'Second'

你可以像在其他答案中建议的那样使用UNION,但是如果你真的想要在同一行中像你的问题那样:

Column_1 | Column_2
'First'    'Second'

尝试这样的事情:

CREATE VIEW dbo.TestDB
AS

SELECT
    dt.First,dt2.Second
    FROM (SELECT
              X AS 'First',ROW_NUMBER() OVER(ORDER BY X) AS RowNumber
              FROM The_Table
              WHERE The_Value = 'y'
         ) dt
        LEFT OUTER JOIN (SELECT
                             X AS 'Second',ROW_NUMBER() OVER(ORDER BY X) AS RowNumber
                             FROM The_Table
                         WHERE The_Value = 'z'
                        ) dt2 ON dt.RowNumber=dt2.RowNumber
go

我不确定如何加入表格,没有关于PK的信息或如何加入它们。

答案 2 :(得分:0)

未测试

CREATE VIEW dbo.TestDB
AS
SELECT     CASE The_Value  when 'y' then x else NULL END AS 'First',
           CASE The_Value  when 'z' then x else NULL END AS 'Second'
FROM       The_Table
WHERE     The_Value in( 'y','z')