在 'and' 附近预期条件的上下文中指定的非布尔类型的表达式。在 SQL CASE 服务器中
An expression of non-boolean type specified in a context where a condition is expected, near 'and'. In SQL Server at CASE
SELECT
d.district_id, d.district_name, d1.district_id, d1.district_name
FROM
tbl_district d, tbl_district d1
WHERE
CASE
WHEN (d.district_id % 2) != 0
THEN d.district_id
END
AND d1.district_id = d.district_id+1;
"Case when"是一个值,不是逻辑运算。
例如:
SELECT
d.district_id, d.district_name, d1.district_id, d1.district_name
FROM
tbl_district d, tbl_district d1
WHERE
CASE
WHEN (d.district_id % 2) != 0
THEN d.district_id
END+1 = d1.district_id
我猜你是想过滤奇数
SELECT
d.district_id, d.district_name, d1.district_id, d1.district_name
FROM
tbl_district d
INNER JOIN tbl_district d1
ON d1.district_id = d.district_id+1
WHERE (d.district_id % 2) != 0
也开始使用 INNER JOIN
而不是旧式的逗号分隔连接
如果您正在使用 SQL SERVER 2012+
那么您可以使用 LEAD
window 函数
SELECT *
FROM (SELECT *,
Lead(district_id)OVER(ORDER BY district_id) AS next_dst,
Lead(district_name)OVER(ORDER BY district_id) AS next_name
FROM tbl_district ) a
WHERE a.district_id + 1 = a.next_dst
AND ( district_id % 2 ) != 0
CREATE PROCEDURE [dbo].[EvenOdd_District]
AS
BEGIN
SELECT d.district_id ,d.district_name,d1.district_id ,d1.district_name
FROM tbl_district d,tbl_district d1 WHERE d.district_id=
CASE
when (d.district_id%2)!=0 then d.district_id
END
AND d1.district_id=d.district_id+1;
END
SELECT
d.district_id, d.district_name, d1.district_id, d1.district_name
FROM
tbl_district d, tbl_district d1
WHERE
CASE
WHEN (d.district_id % 2) != 0
THEN d.district_id
END
AND d1.district_id = d.district_id+1;
"Case when"是一个值,不是逻辑运算。
例如:
SELECT
d.district_id, d.district_name, d1.district_id, d1.district_name
FROM
tbl_district d, tbl_district d1
WHERE
CASE
WHEN (d.district_id % 2) != 0
THEN d.district_id
END+1 = d1.district_id
我猜你是想过滤奇数
SELECT
d.district_id, d.district_name, d1.district_id, d1.district_name
FROM
tbl_district d
INNER JOIN tbl_district d1
ON d1.district_id = d.district_id+1
WHERE (d.district_id % 2) != 0
也开始使用 INNER JOIN
而不是旧式的逗号分隔连接
如果您正在使用 SQL SERVER 2012+
那么您可以使用 LEAD
window 函数
SELECT *
FROM (SELECT *,
Lead(district_id)OVER(ORDER BY district_id) AS next_dst,
Lead(district_name)OVER(ORDER BY district_id) AS next_name
FROM tbl_district ) a
WHERE a.district_id + 1 = a.next_dst
AND ( district_id % 2 ) != 0
CREATE PROCEDURE [dbo].[EvenOdd_District]
AS
BEGIN
SELECT d.district_id ,d.district_name,d1.district_id ,d1.district_name
FROM tbl_district d,tbl_district d1 WHERE d.district_id=
CASE
when (d.district_id%2)!=0 then d.district_id
END
AND d1.district_id=d.district_id+1;
END