我已经编写了一个查询,用于从不同的表中选择一些带有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 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和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 :(得分: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???
答案 1 :(得分: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
答案 2 :(得分: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
答案 3 :(得分:0)
您可以检查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