2017-02-04 11 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

Вам нужно сравнить что-то с результатом. Какова ваша цель? – GurV

+0

[Плохие привычки пинать: использование JOIN в старом стиле] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins. aspx) - стиль старого стиля * разделенный запятыми список таблиц * был заменен на * правильный * ANSI 'JOIN' синтаксис в ANSI - ** 92 ** SQL Standard (** 25 лет ** назад) и его использование не рекомендуется –

ответ

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

«Случай, когда» - это значение, это не логическая операция.

Например:

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