在我的select语句中,有一个CASE WHEN THEN ELSE END AS语句,我无法在WHERE子句中进行过滤。我不明白为什么这会是一个问题,有人可以阐明一下吗?
SELECT
CASE
WHEN m.Country IN ('CANADA', 'UNITED STATES', 'USA', 'MEXICO') THEN 'NA'
WHEN m.Country IN ('BRAZIL') THEN 'JD2'
WHEN m.Country IN ('NZ', 'NEW ZEALAND', 'AUSTRALIA', 'AUSTRALASIA') THEN 'ANZ'
ELSE 'Unknown'
END AS DerivedRegion,
m.ID,
m.[Account Name],
m.[Display Name],
m.[Last Name],
m.[First Name]
FROM dbo.Users AS m
WHERE DerivedRegion = 'Unknown'
那里的WHERE子句给我错误:无效的列名'DerivedRegion',为什么?
WHERE
在处理之前SELECT
。它不知道那时DerviedRegion
是什么。我建议NOT IN
在这种情况下使用来排除国家/地区列表。但是,如果您真的想使用CASE,则可以执行以下操作
SELECT *
FROM
(
SELECT
CASE
WHEN m.Country IN ('CANADA', 'UNITED STATES', 'USA', 'MEXICO') THEN 'NA'
WHEN m.Country IN ('BRAZIL') THEN 'JD2'
WHEN m.Country IN ('NZ', 'NEW ZEALAND', 'AUSTRALIA', 'AUSTRALASIA') THEN 'ANZ'
ELSE 'Unknown'
END AS DerivedRegion,
m.ID,
m.[Account Name],
m.[Display Name],
m.[Last Name],
m.[First Name]
FROM dbo.Users AS m
) AS x
WHERE x.DerivedRegion = 'Unknown'
签出MSDN并向下滚动到SELECT语句的“逻辑处理顺序”,以查看查询的处理顺序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句