Sql 当[新列为notnull]时从[表]
我编写了一个查询,用UNIONALL从不同的表中选择一些结果。 从开始后,可以使用where。 在这里,我想使用我在查询中“生成”的列。 我该怎么做 范例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
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我不完全确定,但这看起来像是一个新问题,而不是对原来问题的澄清。