MSSQL заменяет полное условие предложения WHERE на CASE - PullRequest
1 голос
/ 05 октября 2011

Мне нужно заменить предложение where в подзапросе предложением, которое зависит от значения главного запроса. Я должен заменить полное условие, а не только правую часть условия, поэтому я создал запрос, подобный приведенному ниже:

SELECT p.par_des AS description,
COALESCE(
(SELECT SUM(ope_tot) FROM operator WHERE 

(CASE WHEN p.par_cod = 'TEN01' THEN ope_cau = 'TEN01' OR ope_cau LIKE 'BAN__' ELSE ope_cau = p.par_cod END)

AND (ope_tim BETWEEN '00:00:00' AND '23:59:59' ) )
,0)  AS value 
FROM parameters p WHERE par_cod LIKE 'TEN__';

Как вы можете видеть в жирной части запроса, я заменяю условие предложения where на основе значения поля в главном запросе, и я должен указать также оператор or, если условие выполнено.

Этот запрос хорошо работает на PostgreSQL и MySQL, но он не работает в MSSQL. Как переписать запрос и позволить ему работать также в Microsoft SQL?

Лучше всего, если один и тот же запрос может выполняться без изменений на всех этих трех серверах баз данных: MySQL, PostgreSQL, MSSQL.

1 Ответ

3 голосов
/ 05 октября 2011

SQL Server не разрешает логические выражения, как вы пытаетесь здесь.

   CASE
     WHEN p.par_cod = 'TEN01' THEN ope_cau = 'TEN01'
                                    OR ope_cau LIKE 'BAN__'
     ELSE ope_cau = p.par_cod
   END  

Следующее должно работать во всех трех.

 CASE
         WHEN p.par_cod = 'TEN01' THEN CASE
                                         WHEN ope_cau = 'TEN01'
                                               OR ope_cau LIKE 'BAN__' THEN 1
                                       END
         ELSE CASE
                WHEN ope_cau = p.par_cod THEN 1
              END
       END = 1  

Обратите внимание, что выражения CASE в предложениях WHERE абсолютно не подлежат обсуждению

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