Sql 当[新列为notnull]时从[表]

Sql 当[新列为notnull]时从[表],sql,sql-server-2012,select-query,Sql,Sql Server 2012,Select Query,我编写了一个查询,用UNIONALL从不同的表中选择一些结果。 从开始后,可以使用where。 在这里,我想使用我在查询中“生成”的列。 我该怎么做 范例 SELECT [column1] AS 'K1', ISNULL([column2], 'else') + ' ' + ISNULL([column3], 'else') AS 'K2' FROM [table] FULL JOIN [table] ON A.Name = C.A

我编写了一个查询,用UNIONALL从不同的表中选择一些结果。 从开始后,可以使用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 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 end 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

您可以使用它,但作为子查询的结果

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???

不幸的是,您不能在同一级别上创建的
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

您需要使用子查询或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

您可以检查
Column1
而不是
K1
,因为
K1
是别名,因此不能在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

欢迎使用StackOverflow:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮(
{}
),以很好地格式化和语法突出显示ittnx,以告知我下次使用时请不要在您的问题中添加“已解决”。我们已经知道您得到了一个对您有帮助的答案,这就是“接受答案”复选框的作用。好的,谢谢您为我更改它。K1之前的“res”来自哪里???@user2289664 res-您的子查询结果集的名称。你可以叫它how You wanttnx作为你的答案我会用它再次阅读我的问题我已经更新了也许你能帮我again@user2289664我不完全确定,但这看起来像是一个新问题,而不是对原来问题的澄清。