2013-04-17 3 views
1

Я написал запрос для выбора некоторых результатов из разных таблиц с объединением всех. После этого вы можете использовать где. В том, где я хочу использовать столбец, который я «сделал» в запросе. Как я могу это сделать?из [таблица] когда [новый столбец не является]

пример

SELECT  
    [column1] AS 'K1', 
    ISNULL([column2], 'else') + ' ' + ISNULL([column3], 'else') AS 'K2'  
FROM 
    [table] 
FULL JOIN 
    [table] ON A.Name = C.AccountIdName 
WHERE 
    A.Name IS NOT NULL 
    AND K1 IS NOT NULL 

Это можно взять K1 и установить в в где? Или есть другой вариант?


UPDATE: Новый пример

SELECT  
     [column1] AS 'K1', 
     ISNULL([column2], 'else') + ' ' + ISNULL([column3], 'else') AS 'K2'  
    FROM 
     [table] 
    FULL JOIN 
     [table] ON A.Name = C.AccountIdName 
    WHERE 
     A.Name IS NOT NULL 
     **AND K1 IS NOT NULL 
     AND K3 IS NOT NULL** 

UNION ALL 

SELECT  
     [column1] AS 'K1', 
     ISNULL([column2], 'else') + ' ' + ISNULL([column3], 'else') AS 'K2'  
    FROM 
     [table] 
    FULL JOIN 
     [table] ON A.Name = C.AccountIdName 
    WHERE 
     A.Name IS NOT NULL 
     **AND K2 IS NOT NULL 
     AND K4 IS NOT NULL** 

Как вы можете видеть, что я хочу в первом выберите K1 ан К3, а во втором я хочу K2 торцевую K4

Я надеюсь, что вы можете решить эту проблему проблема тоже, это было хорошее решение.

SELECT * FROM 
(
SELECT [column1] as 'K1' , ISNULL([column2], 'else') + ' ' + ISNULL([column3], 'else') as 'K2' 
FROM [table] full join [table] on A.Name = C.AccountIdName where A.Name IS NOT NULL 
) 
res WHERE res.K1 IS NOT NULL 
+0

Добро пожаловать в StackOverflow: если вы разместите код, XML или данных образцов, пожалуйста ** ** выделить те строки в текстовом редакторе и нажмите на кнопку «код образцы» ('{}') на панель инструментов редактора для красивого формата и синтаксиса выделите его –

+1

tnx за то, что рассказываю мне, что в следующий раз я буду использовать его – Jeroen

+0

Пожалуйста, не добавляйте 'SOLVED' к вашему вопросу. Мы уже знаем, что у вас есть ответ, который вам помог, это флажок «Принимаемый ответ». –

ответ

0

Вы можете использовать его, но в результате вашего подзапроса

SELECT * FROM 
(
SELECT [column1] as 'K1' , ISNULL([column2], 'else') + ' ' + ISNULL([column3], 'else') as 'K2' 
FROM [table] full join [table] on A.Name = C.AccountIdName where A.Name IS NOT NULL 
) 
res WHERE res.K1 IS NOT NULL 

ОБНОВЛЕНО

SELECT * FROM 
(
    SELECT [column1] as 'K1' , ISNULL([column2], 'else') + ' ' + ISNULL([column3], 'else') as 'K2' 
    FROM [table] full join [table] on A.Name = C.AccountIdName where A.Name IS NOT NULL 
) 
res1 WHERE res1.K1 IS NOT NULL AND res1.K3 IS NOT NULL 
UNION ALL 
SELECT * FROM 
(
    SELECT [column1] as 'K1' , ISNULL([column2], 'else') + ' ' + ISNULL([column3], 'else') as 'K2' 
    FROM [table] full join [table] on A.Name = C.AccountIdName where A.Name IS NOT NULL 
) 
res2 WHERE res2.K2 IS NOT NULL AND res2.K4 IS NOT NULL //BUT DOES IT HAS K4??? 
+0

и где это 'res' до того, как K1 исходит от ?? – Jeroen

+0

@ user2289664 res - имя вашего набора результатов подзапроса. Вы можете назвать это так, как вы хотите – Alex

+0

tnx для вашего ответа я использую его – Jeroen

0

К сожалению, вы не можете использовать ALIAS на пункте WHERE что был создан на том же уровне. Есть два варианта, которые можно сделать:

Используйте оригинальный столбец:

SELECT [column1] as 'K1' , 
     ISNULL([column2], 'else') + ' ' + ISNULL([column3], 'else') as 'K2' 
FROM [table] full join [table] 
      on A.Name = C.AccountIdName 
where A.Name IS NOT NULL AND [column1] IS NOT NULL 

или заверните подзапрос:

SELECT K1, K2 
FROM 
(
    SELECT [column1] as 'K1' , 
      ISNULL([column2], 'else') + ' ' + ISNULL([column3], 'else') as 'K2' 
    FROM [table] full join [table] 
       on A.Name = C.AccountIdName 
    where A.Name IS NOT NULL 
) s 
WHERE K1 IS NOT NULL 
0

Вы должны будете использовать подзапрос или КТР:

;WITH CTE AS 
(
SELECT  
    [column1] AS 'K1', 
    ISNULL([column2], 'else') + ' ' + ISNULL([column3], 'else') AS 'K2'  
FROM 
    [table] 
FULL JOIN 
    [table] ON A.Name = C.AccountIdName 
WHERE 
    A.Name IS NOT NULL 
) 
SELECT  
    K1, K2 
FROM 
    CTE 
WHERE 
    K1 IS NOT NULL 
0

Вы можете проверить на Column1 вместо K1 с K1 - это псевдоним, поэтому его нельзя использовать в случае условия. Как:

SELECT 
    [column1] as 'K1' , 
    ISNULL([column2], 'else') + ' ' + ISNULL([column3], 'else') as 'K2' 
FROM [table] full join [table] on A.Name = C.AccountIdName 
where 
    A.Name IS NOT NULL AND 
    [column1] IS NOT NULL 
Смежные вопросы