2013-04-17 82 views
1

我已經寫了一個查詢來從不同的表中選擇一些union all的結果。 之後從你可以使用的地方。 在那裏我想使用我在查詢中創建的列。 我該怎麼做?from [table] when [new column is notnull]

例如

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和設置到哪裏? 或者還有其他選擇嗎?


更新:全新例如

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 EN K3和第二我想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

請不要添加'已解決'您的問題。我們已經知道您的答案對您有幫助,這就是'接受答案'複選框的用途。 –

回答

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

和'K1'來自哪裏'res'? – Jeroen

+0

@ user2289664 res - 子查詢結果集的名稱。你可以稱之爲你想要如何 – Alex

+0

tnx爲你的答案我將使用它 – Jeroen

0

不幸的是,你不能在WHERE子句中使用ALIAS那是在同一個級別上創建的。有兩種選擇,可以做:

使用原始列:

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

你需要使用子查詢或CTE:

;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 
相關問題