Как исправить этот SQL-запрос?Я не мог найти решение - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь выполнить этот запрос, но он не работает, и появляется сообщение об ошибке.

SELECT 
    LAMACOM.GACCENTRYD.ACCNUM_0, 
    CASE
       WHEN LAMACOM.GACCENTRYD.SNS_0 < 0
            AND LAMACOM.GACCENTRY.RVS_0 <> 3
            AND LAMACOM.GACCENTRY.TYP_0 <> "AVC"
            AND LAMACOM.GACCENTRY.TYP_0 <> "AVE"
            AND LAMACOM.PAYMENTH.PAYTYP_0 = "CCHQT"
            AND LAMACOM.PAYMENTH.STA_0 < 5
          THEN LAMACOM.GACCENTRYD.AMTLOC_0 * 1
       WHEN LAMACOM.GACCENTRYD.SNS_0 < 0
            AND LAMACOM.GACCENTRY.RVS_0 <> 3
            AND LAMACOM.GACCENTRY.TYP_0 <> "AVC"
            AND LAMACOM.GACCENTRY.TYP_0 <> "AVE"
            AND LAMACOM.PAYMENTH.PAYTYP_0 = "CTRT"
            AND LAMACOM.GACCENTRY.DUDDAT_0 = GETDATE()
          THEN LAMACOM.GACCENTRYD.AMTLOC_0 * 1
    END AS ENC_NC
FROM 
    LAMACOM.GACCENTRY, LAMACOM.GACCENTRYD, LAMACOM.PAYMENTH
WHERE
    LAMACOM.GACCENTRYD.TYP_0 = LAMACOM.GACCENTRY.TYP_0 
    LAMACOM.GACCENTRYD.NUM_0 = LAMACOM.GACCENTRY.NUM_0
    LAMACOM.PAYMENTH.BPRVCR_0 = LAMACOM.GACCENTRY.NUM_0

и вот в чем проблема

Microsoft SQL: неверный синтаксис против 'LAMACOM'.

Не могу определить, из какогостол, из которого исходит проблема.

Ответы [ 5 ]

0 голосов
/ 24 декабря 2018

Вы должны использовать AND после каждого кластера WHERE.

WHERE
LAMACOM.GACCENTRYD.TYP_0 = LAMACOM.GACCENTRY.TYP_0 AND
LAMACOM.GACCENTRYD.NUM_0 = LAMACOM.GACCENTRY.NUM_0 AND 
LAMACOM.PAYMENTH.BPRVCR_0 = LAMACOM.GACCENTRY.NUM_0
0 голосов
/ 24 декабря 2018

Вы можете использовать INNER JOIN

SELECT 
    ....
FROM 
    LAMACOM.GACCENTRY
INNER JOIN 
    LAMACOM.GACCENTRYD ON LAMACOM.GACCENTRYD.TYP_0 = LAMACOM.GACCENTRY.TYP_0
INNER JOIN 
    LAMACOM.PAYMENTH ON LAMACOM.PAYMENTH.BPRVCR_0 = LAMACOM.GACCENTRY.NUM_0
0 голосов
/ 24 декабря 2018

Вы должны поставить условие И или ИЛИ в предложении WHERE

SELECT 
    LAMACOM.GACCENTRYD.ACCNUM_0, 
    CASE
       WHEN LAMACOM.GACCENTRYD.SNS_0 < 0
            AND LAMACOM.GACCENTRY.RVS_0 <> 3
            AND LAMACOM.GACCENTRY.TYP_0 <> "AVC"
            AND LAMACOM.GACCENTRY.TYP_0 <> "AVE"
            AND LAMACOM.PAYMENTH.PAYTYP_0 = "CCHQT"
            AND LAMACOM.PAYMENTH.STA_0 < 5
          THEN LAMACOM.GACCENTRYD.AMTLOC_0 * 1
       WHEN LAMACOM.GACCENTRYD.SNS_0 < 0
            AND LAMACOM.GACCENTRY.RVS_0 <> 3
            AND LAMACOM.GACCENTRY.TYP_0 <> "AVC"
            AND LAMACOM.GACCENTRY.TYP_0 <> "AVE"
            AND LAMACOM.PAYMENTH.PAYTYP_0 = "CTRT"
            AND LAMACOM.GACCENTRY.DUDDAT_0 = GETDATE()
          THEN LAMACOM.GACCENTRYD.AMTLOC_0 * 1
    END AS ENC_NC
FROM 
    LAMACOM.GACCENTRY, LAMACOM.GACCENTRYD, LAMACOM.PAYMENTH
WHERE
    LAMACOM.GACCENTRYD.TYP_0 = LAMACOM.GACCENTRY.TYP_0 AND
    LAMACOM.GACCENTRYD.NUM_0 = LAMACOM.GACCENTRY.NUM_0 AND 
    LAMACOM.PAYMENTH.BPRVCR_0 = LAMACOM.GACCENTRY.NUM_0 

Чтобы избежать этих проблем в будущем, вы можете проанализировать запрос, чтобы узнать строку вопроса или пользователя сообщения

CTRL + F5

или нажмите значок проверки после выбора запроса

enter image description here

0 голосов
/ 24 декабря 2018

Ваш WHERE содержит 3 условия, но эти условия необходимо разделить, скорее всего, AND:

FROM 
    LAMACOM.GACCENTRY, LAMACOM.GACCENTRYD, LAMACOM.PAYMENTH
WHERE
    LAMACOM.GACCENTRYD.TYP_0 = LAMACOM.GACCENTRY.TYP_0 AND
    LAMACOM.GACCENTRYD.NUM_0 = LAMACOM.GACCENTRY.NUM_0 AND
    LAMACOM.PAYMENTH.BPRVCR_0 = LAMACOM.GACCENTRY.NUM_0

Или если вы следуете передовым методам и используете JOIN s:

FROM LAMACOM.GACCENTRY
JOIN LAMACOM.GACCENTRYD ON LAMACOM.GACCENTRYD.TYP_0 = LAMACOM.GACCENTRY.TYP_0
JOIN LAMACOM.PAYMENTH   ON LAMACOM.PAYMENTH.BPRVCR_0 = LAMACOM.GACCENTRY.NUM_0

Для этого не требуется WHERE, если только вы не хотите навязывать дополнительные условия (а затем: не забывайте AND!)

0 голосов
/ 24 декабря 2018

В строках 10 и 14 есть символ ], который выглядит как опечатка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...