Case, выберите условные требования - PullRequest
1 голос
/ 29 марта 2012

При работе в запросе Excel мне нужен условный оператор, который будет читать одно поле, и на основе этого значения установить другое поле в минус (или нет).

Мой код SQl выглядит следующим образом:

SELECT "_bvSTTransactionsFull".txdate, 
       SUM("_bvSTTransactionsFull".debit)            AS 'TOTALDebit', 
       SUM("_bvSTTransactionsFull".credit)           AS 'TOTALCredit', 
       SUM("_bvSTTransactionsFull".tax_amount)       AS 'TOTALTax_Amount', 
       SUM("_bvSTTransactionsFull".VALUE)            AS 'TOTALValue', 
       SUM("_bvSTTransactionsFull".actualvalue)      AS 'TOTALActualValue', 
       SUM("_bvSTTransactionsFull".actualsalesvalue) AS 'TOTALActualSalesValue', 
       SUM("_bvSTTransactionsFull".profit)           AS 'TOTALProfit' 
FROM   sqlschema.dbo."_bvSTTransactionsFull" "_bvSTTransactionsFull" 
WHERE  ( "_bvSTTransactionsFull".txdate >=? 
         AND "_bvSTTransactionsFull".txdate <=? ) 
GROUP  BY "_bvSTTransactionsFull".txdate, 
          "_bvSTTransactionsFull".description 
HAVING ( "_bvSTTransactionsFull".description LIKE 'POS Sale' ) 
        OR ( "_bvSTTransactionsFull".description LIKE 'POS Return' ) 
ORDER  BY "_bvSTTransactionsFull".txdate 

Мне нужен запрос на выборку для просмотра поля с именем "ActualQuantity" (в таблице "_bvSTTransactionsFull"), и если это поле <0, то <code>Tax_Amount = -(Tax_Amount) или if ActualQuantity >=0, then Tax_Amount = Tax_Amount.

Обратите внимание, что запрос «суммируется», поэтому я предполагаю, что этот условный аспект должен быть обработан до того, как произойдет суммирование.Запрос суммирует приблизительно 100 000 записей в ежедневные итоги.

1 Ответ

0 голосов
/ 29 марта 2012
SELECT "_bvSTTransactionsFull".txdate, 
       SUM("_bvSTTransactionsFull".debit)            AS 'TOTALDebit', 
       SUM("_bvSTTransactionsFull".credit)           AS 'TOTALCredit', 
       SUM(case when "_bvSTTransactionsFull".ActualQuantity >= 0 
           then "_bvSTTransactionsFull".tax_amount
           else - "_bvSTTransactionsFull".tax_amount
           end)                                      AS 'TOTALTax_Amount', 
       SUM("_bvSTTransactionsFull".VALUE)            AS 'TOTALValue', 
       SUM("_bvSTTransactionsFull".actualvalue)      AS 'TOTALActualValue', 
       SUM("_bvSTTransactionsFull".actualsalesvalue) AS 'TOTALActualSalesValue', 
       SUM("_bvSTTransactionsFull".profit)           AS 'TOTALProfit' 
FROM   sqlschema.dbo."_bvSTTransactionsFull" "_bvSTTransactionsFull" 
WHERE  ( "_bvSTTransactionsFull".txdate >=? 
         AND "_bvSTTransactionsFull".txdate <=? ) 
GROUP  BY "_bvSTTransactionsFull".txdate, 
          "_bvSTTransactionsFull".description 
HAVING ( "_bvSTTransactionsFull".description LIKE 'POS Sale' ) 
        OR ( "_bvSTTransactionsFull".description LIKE 'POS Return' ) 
ORDER  BY "_bvSTTransactionsFull".txdate 

Если ActualQuantity может быть нулем, но taxAmount в той же строке также равен нулю, вы можете использовать функцию знака для изменения знака tax_amount:

sign(ActualQuantity) * tax_amount

UPDATE:

Итак, я понимаю, что у MS Query есть проблемы с использованием параметров в запросе, которые нельзя отобразить графически. Обходной путь - заменить параметры некоторыми константами, сохранить книгу в формате XML и изменить константы на «?». На сайте есть ссылка, показывающая код VBA, который выполняет замену , но вам придется выяснить, как он работает, поскольку я не очень хорошо знаю VBA.

ОБНОВЛЕНИЕ 2:

С другой стороны, самый простой выход - создать представление в вашей базе данных.

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