SQL Server, просмотр с использованием нескольких операторов выбора - PullRequest
0 голосов
/ 28 апреля 2010

Я часами бьюсь головой, это кажется достаточно простым, но здесь идет:

Я хотел бы создать представление, используя несколько операторов выбора, которые выводят один набор записей Пример:

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'

любая помощь будет принята с благодарностью! -Спасибо.

Ответы [ 3 ]

2 голосов
/ 29 апреля 2010

если вы хотите это:

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

Я не уверен, как присоединяться к таблицам, не дается никакой информации о ПК или как присоединиться к ним.

2 голосов
/ 29 апреля 2010

Объединение может быть тем, что вам нужно, но имейте в виду, что у вас должны быть одинаковые столбцы, поэтому вам нужно будет добавить пустой столбец к каждому выбору.

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'

Это объединит два результата и даст вам только уникальные комбинации. Мне кажется, это не то, что вы ищете.

Есть ли причина, по которой вы не можете выполнить это за один запрос или, возможно, выполнить несколько подзапросов? Может быть, вы можете привести более конкретный пример.

0 голосов
/ 29 апреля 2010

Непроверенные

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')
...