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

[古いスタイルのジョインを使って蹴るのが悪い](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins。 aspx) - ANSI - ** 92 ** SQL標準(** 25年**前)のold * style *カンマ区切りのテーブル*スタイルのリストが*適切な* 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

"ケース"が値の場合、論理演算ではありません。例えば

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 
関連する問題