0

CASE ステートメント内で NOT IN 用語を使用したいのですが、構文エラーが発生します。T.Segment 列内に特定の数値 (この場合は 14) が表示されない場合は常に TribQin=0 を設定したいと考えています。

SELECT DISTINCT F.JDAY,     
    F.TL6 AS 'OriginalLayer',
    CASE
        WHEN 14 NOT IN T.Segment THEN 0
        ELSE 
                (SELECT T.flow
                FROM trib_data AS T
                WHERE T.JDAY<=F.JDAY AND T.Segment=14 AND T.Year=2000
                ORDER BY T.JDAY DESC LIMIT 1)
    END AS 'TribQin'
FROM FlexGridLayers AS F
INNER JOIN trib_data AS T
ON T.Segment=F.Segment
WHERE F.Year=2000 AND F.Segment=14
ORDER BY F.JDAY;

私が得ているエラーは次のとおりです。

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'T.Segment THEN 0
        ELSE 
                (SELECT T.flow
                FROM trib_data AS T
                ' at line 4
4

3 に答える 3

0

以下を試すことができます:

SELECT DISTINCT k.JDAY,     
    k.TL6 AS 'OriginalLayer',
    CASE
        WHEN k.kid is not null THEN 0
        ELSE 
                (SELECT T.flow
                FROM trib_data AS T
                WHERE T.JDAY<=F.JDAY AND T.Segment=14 AND T.Year=2000
                ORDER BY T.JDAY DESC LIMIT 1)
    END AS 'TribQin'
FROM ( select F.*,F2.id as kid from FlexGridLayers F 
       left outer join FlexGridLayers F2 on F.id=F2.id and F.Segment=14) k
INNER JOIN trib_data AS T
ON T.Segment=k.Segment
WHERE k.Year=2000 AND k.Segment=14
ORDER BY k.JDAY;

クエリは、値 14 が列全体に存在するかどうかを知ることができるように、それ自体とセグメント = 14 の値でテーブルを結合することです。

于 2012-07-24T02:56:32.843 に答える
0

これを使って:

CASE
    WHEN T.Segment != 14 THEN 0
    ELSE ...
于 2012-07-24T02:32:51.267 に答える
-1

MySQL の場合、

NOT

うまくいかない、試してみる

<>

(より小さいまたはより大きい、すなわち「ない」)

于 2012-07-24T02:31:33.170 に答える