синтаксическая ошибка во вложенном выражении "sum (case when") - PullRequest
0 голосов
/ 18 сентября 2019

У меня есть база данных с информацией от нескольких компаний, которые по-разному записывают свои данные.Чтобы отметить, что такое кредитовое авизо / финансовый сбор / счет-фактура / и т.д., 3 компании используют определенное поле, в то время как 3 другие компании просто полагаются на положительные и отрицательные значения.

Но мне нужны итоги - и они будут нужны мне часто ... поэтому я подумал, что утверждение Sum Case - это путь.

Я прочитал много похожих вопросов на этом сайте -но я не нахожу исправления, которое работает.Большинство из них либо не для SSMS, либо не обращаются к нескольким классификаторам.

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

SUM(CASE WHEN((ff29='invoice' AND (import_source_id=1 OR import_source_id=2 OR import_source_id=6)) OR (amount_invoice>0 AND (import_source_id=4 OR import_source_id=5 OR import_source_id=8)) THEN CAST(amount_invoice AS DECIMAL(18,2)) ELSE 0 END) AS 'Debits',

SUM(CASE WHEN((ff29='credit memo' AND (import_source_id=1 OR import_source_id=2 OR import_source_id=6)) OR (amount_invoice<0 AND (import_source_id=4 OR import_source_id=5 OR import_source_id=8)) THEN CAST(amount_invoice AS DECIMAL(18,2)) ELSE 0 END) AS 'Credits'

Я ожидал, что мои результаты будут отображаться в виде 2 столбцов (Debits & Credits) для каждой компании (import_source_id) - но включать только определенные результаты, которые по-разному записываютсякаждая компания, которая находится в моей базе данных.

Сообщение 156, Уровень 15, Состояние 1, Строка 4 Неверный синтаксис рядом с ключевым словом 'THEN'.Сообщение 102, Уровень 15, Состояние 1, Строка 10 Неверный синтаксис рядом с '='.Msg 102, Уровень 15, Состояние 1, Строка 11 Неверный синтаксис рядом с '='.

Я также не знаю, что поставить в начале и конце кода в этих полях с вопросами, чтобы он показывалсякрасиво отделены в этой серой коробке, как и все остальные.Итак, я прошу прощения за это.

1 Ответ

1 голос
/ 18 сентября 2019

Удалите открывающие скобки после обоих WHEN s (или добавьте закрывающие скобки до THEN):

SUM(CASE 
  WHEN
    (ff29='invoice' AND (import_source_id=1 OR import_source_id=2 OR import_source_id=6)) 
    OR 
    (amount_invoice>0 AND (import_source_id=4 OR import_source_id=5 OR import_source_id=8)) 
  THEN CAST(amount_invoice AS DECIMAL(18,2)) 
  ELSE 0 
END) AS 'Debits',

SUM(CASE 
  WHEN
    (ff29='credit memo' AND (import_source_id=1 OR import_source_id=2 OR import_source_id=6)) 
    OR 
    (amount_invoice<0 AND (import_source_id=4 OR import_source_id=5 OR import_source_id=8)) 
  THEN CAST(amount_invoice AS DECIMAL(18,2)) 
  ELSE 0 
END) AS 'Credits'

Также почему бы не использовать IN для упрощения:

SUM(CASE 
  WHEN
    (ff29='invoice' AND (import_source_id IN (1,2,6)) 
    OR 
    (amount_invoice>0 AND (import_source_id IN (4,5,8)) 
  THEN CAST(amount_invoice AS DECIMAL(18,2)) 
  ELSE 0 
END) AS 'Debits',

SUM(CASE 
  WHEN
    (ff29='credit memo' AND (import_source_id IN(1,2,6)) 
    OR 
    (amount_invoice<0 AND (import_source_id(4,5,8)) 
  THEN CAST(amount_invoice AS DECIMAL(18,2)) 
  ELSE 0 
END) AS 'Credits'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...