SQL с использованием предложения WHERE только для первого столбца - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть таблица со столбцами:

customer_id, 
customer_name,
transaction_number, 
transaction_date,
transaction_type,
transaction_value,
transaction_approved. 

Я пытаюсь создать список, где столбцы

customer_id,
customer_name,
total transaction value

, где transaction_type является кредитом и сделано в 2020 году , общая стоимость транзакции, где transaction_type - дебет или около sh в 2019 году.

Однако этот список включает только customer_id, который совершил хотя бы одну транзакцию с использованием кредита в 2020 году. Как бы я использовал предложение where, чтобы получить критерии для customer_id, а затем получить остальную часть списка, основываясь только на этих customer_ids?

Будет возвращаться

  • customer_id, где по крайней мере одна транзакция была совершена с использованием кредита в 2019
  • , а затем другие столбцы рядом с он будет возвращать значения для этого customer_id

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020

Что-то подобное должно сработать:

select customer_id, customer_name, sum(effective_value)
    from (
        select customer_id, customer_name,
                case
                    when transaction_type in ('debit', 'cash')
                            and '2019' <= transaction_date
                            and transaction_date < '2020'
                        then transaction_value
                    else 0
                END effective_value
            from transactions as T
    ) as T
    group by customer_id, customer_name;

Вам придется адаптировать сравнение transaction_date для соответствия синтаксису вашей базы данных.

0 голосов
/ 27 февраля 2020

Как я понимаю из приведенного выше описания, пользователю нужны клиенты, у которых есть кредит транзакции типа в 2020 году, но он хочет получить сумму суммы за 2019 год, а также сумму для дебета типа транзакции и приблизительно sh. Обновите вопрос, если дело не в этом

select 
    customer_id, customer_name,
    sum(coalesce(transaction_value,0)) as total_transaction_value 
from 
    table_T 
where 
    customer_id in (select distinct customer_id from table_T 
                    where transaction_type = 'credit'  
                      and transaction_date >= '2020-01-01')
    and transaction_date >= '2019-01-01'  
    and transaction_date < '2020-01-01' 
    and transaction_type in ('debit', 'cash')
group by  
    customer_id, customer_name

База данных не указана, возможно, вам придется проанализировать поле даты соответственно

...