SQL ставит (-) знак перед моим выводом

1

ERD Ожидаемый выход

Мне нужно написать выражение, которое создаст отчет о клиентах, в котором будут показаны все клиенты, счета и транзакции. Включить учетные записи без транзакций. Решите, используя JOIN... ON. И там должно быть - войдите в мой выводaction_amount, если тип_талога дебетовый.

Я пытался использовать формат, если еще, когда тогда... и т.д.

Это то, что я до сих пор. Не могу понять, поставил - подписывайтесь на мой вывод.

select c.first_name "First", c.surname "Last",c.date_entered "Acct Date",
       t.account_type "Type", t.transaction_number "Trans #", 
       t.transaction_date "Trs Date", t.transaction_amount "Amount"
  from wgb_customer c
  join wgb_transaction t on (c.customer_number=t.customer_number) 
 order by 1,2,3,4;
  • 1
    sqlplus - это продукт, принадлежащий базе данных oracle , который, кажется, искажен, используя вместе sqlplus и mysql качестве тегов.
  • 1
    Не могли бы вы добавить описания таблиц?
Показать ещё 4 комментария
Теги:
sqlplus

2 ответа

0

Прежде всего, вам также нужно присоединиться к таблице счетов и использовать LEFT OUTER JOIN для таблицы транзакций, поскольку это должно создать выходные данные также для учетной записи без транзакций.
Кроме того, используйте оператор CASE для типа транзакции, чтобы добавить знак минус.
Примерно так (хотя я не пробовал; может даже не скомпилировать):

SELECT          cust.first_name         AS first_name,
                cust.surname            AS last_name,
                acct.account_type       AS acct_type,
                acct.date_created       AS acct_date,
                trns.transaction_number AS trans_nr,
                trns.transaction_date   AS trans_date,
                CASE
                  WHEN trns.transaction_type IS NULL THEN NULL
                  WHEN trns.transaction_type = 'D'   THEN '-' || TO_CHAR(transaction_amount, 'L99G999D99')
                  ELSE TO_CHAR(transaction_amount, 'L99G999D99')
                END                     AS amount
FROM            wgb_customer cust
JOIN            wgb_account  acct
  ON            acct.customer_number = cust.customer_number
LEFT OUTER JOIN wgb_transaction trns
             ON trns.customer_number = acct.customer_number
            AND trns.account_type    = acct.account_type
ORDER BY        last_name,
                first_name,
                acct_type,
                acct_date,
                trans_nr;
0

Вы пробовали что-то подобное

SELECT IF(t.transaction_type = 'debit', CONCAT('-',t.transaction_amount), t.transaction_amount) "Amount" ...

Может быть, это работает и для Oracle

Ещё вопросы

Сообщество Overcoder
Наверх
Меню