如何解决这个问题;别名";在SQL语句中
我正在尝试筛选联接结果,但别名出现问题如何解决这个问题;别名";在SQL语句中,sql,inner-join,where,alias,Sql,Inner Join,Where,Alias,我正在尝试筛选联接结果,但别名出现问题cPlace 下面是我的连接,它可以工作,但在WHERE子句中失败。我基本上显示的是ISO国家代码,如果国家是107(美国),则显示国家缩写 SELECT CASE WHEN co.CIDNo = 107 THEN al.State ELSE co.ISO END AS cPlace, al.ALIDNo FROM dbo.AssignedList AS al INNER JOIN dbo.
cPlace
下面是我的连接,它可以工作,但在WHERE
子句中失败。我基本上显示的是ISO国家代码,如果国家是107(美国),则显示国家缩写
SELECT
CASE
WHEN co.CIDNo = 107 THEN al.State ELSE co.ISO
END AS cPlace,
al.ALIDNo
FROM
dbo.AssignedList AS al
INNER JOIN
dbo.Country co ON al.CIDNo = co.CIDNo
-->>> Fails after this point
WHERE
al.cPlace IN ('ALB', 'ATG', 'BEN', 'BFA', 'BHS', 'BLM', 'COM', 'Con', 'CT', 'ERI', 'ETH', 'GA', 'GLP', 'GUY', 'HI', 'KAZ', 'LBY', 'MA', 'MCO', 'MLT', 'MN', 'NPL', 'PRI', 'ROM', 'SDN', 'SGP', 'SLE', 'SLV', 'TGO', 'TN', 'UZB', 'WSM')
WHERE
子句前的结果:
cPlace ALIDNo
--------------
DZA 1
AGO 2
BEN 3
CT 4
BFA 5
BDI 6
NY 7
提前感谢大家的帮助 您不能在
on
子句或where
子句中引用列别名
一种选择是重复逻辑:
SELECT (CASE WHEN co.CIDNo = 107 THEN al.State ELSE co.ISO END) AS cPlace,
al.ALIDNo
FROM dbo.AssignedList al INNER JOIN
dbo.Country co
ON al.CIDNo = co.CIDNo
WHERE (CASE WHEN co.CIDNo = 107 THEN al.State ELSE co.ISO END) IN (. . .);
另一个选项是使用子查询/CTE/apply
定义别名:
SELECT v.cPlace, al.ALIDNo
FROM dbo.AssignedList al INNER JOIN
dbo.Country co
ON al.CIDNo = co.CIDNo CROSS APPLY
(VALUES ( CASE WHEN co.CIDNo = 107 THEN al.State ELSE co.ISO END )
) v(cPlace)
WHERE cPlace IN (. . .);
您需要使用公共表表达式(
WITH…
)或派生表(SELECT…FROM(SELECT…
)嵌套查询