2017-02-04 29 views
-1
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; 
+0

您需要将case语句的结果与某些内容进行比较。你的目标是什么? – GurV

+0

[踢坏的习惯:使用旧式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins。 aspx) - 在ANSI - ** 92 ** SQL标准(** 25年**之前)中将旧式*逗号分隔的表*样式列表替换为* proper * ANSI'JOIN'语法不鼓励使用 –

回答

0

我猜你是想筛选奇数

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窗口功能

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 
0

“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 
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 
相关问题