У меня есть две таблицы, одна из которых таблица подробностей транзакций , которая выглядит следующим образом:
TXN_DATE INDIVIDUAL_ID TRANSACTION_NUMBER ITEM_NUM SLS ACT_TRANSACTION_ID
1/2/2019 1 12345 326 $10 123366777
1/2/2019 1 12345 112 $20 123366777
1/2/2019 1 12345 554 $30 123366777
2/3/2019 1 35565 144 $40 655544444
2/3/2019 1 35565 585 $20 655544444
4/3/2019 4 88567 987 $20 656697778
4/3/2019 4 88567 788 $15 656697778
5/3/2019 4 22456 659 $10 366655544
5/3/2019 4 22456 781 $60 366655544
1/23/2019 5 89464 364 $40 647778777
1/23/2019 5 89464 564 $30 647778777
4/3/2019 6 32224 891 $20 987779899
4/3/2019 6 32224 345 $30 987779899
Другая таблица транзакций выглядит следующим образом:
TXN_DATE INDIVIDUAL_ID TRANSACTION_NUMBER SLS Loyalty_Number ACT_TRANSACTION_ID
1/2/2019 1 12345 $60 987654 123366777
2/3/2019 1 35565 $60 null 655544444
4/3/2019 4 88567 $35 234456 656697778
5/3/2019 4 22456 $70 null 366655544
1/23/2019 5 89464 $70 655498 647778777
4/3/2019 6 32224 $50 556645 987779899
Существует 3-я таблица лояльности, поэтому, если клиент является участником лояльности, он будет в таблице ниже.
INDIVIDUAL_ID Loyalty_number
1 987654
4 234456
5 655498
6 556645
Я пытаюсь найти количество клиентов и их продаж для лояльность против статуса не лояльности. Ниже приведен запрос, который я использую:
SELECT GROUPS,
COUNT(DISTINCT Customer_ID) COUNT_OF_CUSTOMERS,
SUM(DOLLAR_VALUE_US) DOLLAR_VALUE_US,
SUM(COUNT_OF_TRANSACTIONS) COUNT_OF_TRANSACTIONS
FROM (
SELECT DISTINCT
Customer_ID,
CASE WHEN COUNT(DISTINCT LOYALTY) = 1 THEN 'ONLY' || ' ' || MAX(LOYALTY)
ELSE 'CROSS'
END AS GROUPS,
SUM (DOLLAR_VALUE_US) DOLLAR_VALUE_US,
COUNT (DISTINCT TRANSACTION_NUMBER) COUNT_OF_TRANSACTIONS ---ADDED DISTINCT
FROM (SELECT A.Customer_ID,
CASE WHEN CARD_NUMBER IS NULL THEN 'NONLOYALTYTXN'
WHEN CARD_NUMBER IS NOT NULL THEN 'LOYALTYTXN' END AS LOYALTY,
DOLLAR_VALUE_US,
TXN_DATE,
A.TRANSACTION_NUMBER
FROM transaction_detail A JOIN transaction B ON A.ACT_TRANSACTION_ID = B.ACT_TRANSACTION_ID)
WHERE TRUNC (TXN_DATE) BETWEEN '01-JAN-19' AND '31-DEC-19'
AND Customer_ID IS NOT NULL
GROUP BY Customer_ID)
GROUP BY GROUPS;
Используя этот запрос, я получаю три сегмента: 1) только верность 2) только нелояльность 3) кросс
Есть ли способ просто найти верность а не номера лояльности? потому что есть также случаи, когда клиент мог не указать свой номер лояльности во время оформления заказа (например, клиенты 1 и 4). Я не уверен, как поступить с этим.