I HAVE 3 TABLES :
Table1: Table Name: FULL_DATA
DATE ORDER_NO AMOUNT MODE
01-04-2019 ADVANVCE.:ORD1971718 5000 DEBIT-CARD
01-04-2019 ADVANVCE.:ORD1961718 6000 CASH
01-04-2019 ADVANVCE.:ORD2001819 8000 CASH
02-04-2019 ADVANVCE.:ORD2011819 10000 CASH
02-04-2019 ADVANVCE.:ORD0891819 3000 CASH
02-04-2019 ADVANVCE.:ORD2021819 8000 DEBIT-CARD
02-04-2019 ADVANVCE.:ORD2031819 12000 CASH
03-04-2019 ADVANVCE.:ORD2041819 14000 CASH
03-04-2019 ADVANVCE.:ORD2051819 17000 CASH
03-04-2019 ADVANVCE.:ORD2061819 14000 CASH
03-04-2019 ADVANVCE.:ORD2061819 15000 DEBIT-CARD
03-04-2019 ADVANVCE.:ORD2071819 4000 DEBIT-CARD
03-04-2019 ADVANVCE.:ORD2071819 1000 CASH
04-04-2019 ADVANVCE.:ORD2101819 500 CASH
04-04-2019 ADVANVCE.:ORD2091819 1000 CASH
04-04-2019 ADVANVCE.:ORD2081819 2000 CASH
04-04-2019 ADVANVCE.:ORD0471819 8000 CASH
Table2: Table Name: ORDER_DETAILS
ORDER_NO ITEM_NAME CUSTOMER_ID
ORD2001819 ITEM-1 7
ORD2011819 ITEM-2 6
ORD2021819 ITEM-3 5
ORD2021819 ITEM-4 5
ORD2021819 ITEM-5 5
ORD2021819 ITEM-6 5
ORD2031819 ITEM-7 8
ORD2041819 ITEM-8 67
ORD2041819 ITEM-9 67
ORD2051819 ITEM-10 89
ORD2061819 ITEM-11 54
ORD2061819 ITEM-12 54
ORD2071819 ITEM-13 11
ORD2101819 ITEM-14 12
ORD2091819 ITEM-15 14
ORD2081819 ITEM-16 16
ORD1971718 ITEM-17 68
ORD1971718 ITEM-18 68
ORD0471819 ITEM-19 90
ORD0891819 ITEM-20 44
ORD1961718 ITEM-21 55
Table3: Table Name: CUSTOMER_DETAILS
CUSTOMER_ID CUSTOMER_NAME
7 CUSTOMER-1
6 CUSTOMER-24
5 CUSTOMER-39
8 CUSTOMER-40
67 CUSTOMER-15
89 CUSTOMER-66
54 CUSTOMER-7
11 CUSTOMER-89
12 CUSTOMER-9
14 CUSTOMER-10
16 CUSTOMER-11
68 CUSTOMER-121
90 CUSTOMER-134
44 CUSTOMER-147
55 CUSTOMER-158
QUERY TO JOIN
THESE TABLE WHICH WILL TAKE DATE, ORDER_NO, AMOUNT, MODE COLUMNS FROM FULL_DATA TABLE AND JOIN
ITS ORDER_NO (GET ORDER NO BY SPLITTING ORDER NO BY ":") WITH ORDER_DETAILS TABLE AND GET IT CUSTOMER ID AND THEN JOIN
ITS CUSTOMER ID WITH CUSTOMER DETAILS TABLE AND GET CUSTOMER NAMES????
THE DATA WILL BE LOOK LIKE THESE:
Final Query Result:
DATE CUSTOMER_NAME ORDER_NO AMOUNT MODE
01-04-2019 CUSTOMER-121 ADVANVCE.:ORD1971718 5000 DEBIT-CARD
01-04-2019 CUSTOMER-158 ADVANVCE.:ORD1961718 6000 CASH
01-04-2019 CUSTOMER-1 ADVANVCE.:ORD2001819 8000 CASH
02-04-2019 CUSTOMER-24 ADVANVCE.:ORD2011819 10000 CASH
02-04-2019 CUSTOMER-147 ADVANVCE.:ORD0891819 3000 CASH
02-04-2019 CUSTOMER-39 ADVANVCE.:ORD2021819 8000 DEBIT-CARD
02-04-2019 CUSTOMER-40 ADVANVCE.:ORD2031819 12000 CASH
03-04-2019 CUSTOMER-15 ADVANVCE.:ORD2041819 14000 CASH
03-04-2019 CUSTOMER-66 ADVANVCE.:ORD2051819 17000 CASH
03-04-2019 CUSTOMER-7 ADVANVCE.:ORD2061819 14000 CASH
03-04-2019 CUSTOMER-7 ADVANVCE.:ORD2061819 15000 DEBIT-CARD
03-04-2019 CUSTOMER-89 ADVANVCE.:ORD2071819 4000 DEBIT-CARD
03-04-2019 CUSTOMER-89 ADVANVCE.:ORD2071819 1000 CASH
04-04-2019 CUSTOMER-9 ADVANVCE.:ORD2101819 500 CASH
04-04-2019 CUSTOMER-10 ADVANVCE.:ORD2091819 1000 CASH
04-04-2019 CUSTOMER-11 ADVANVCE.:ORD2081819 2000 CASH
04-04-2019 CUSTOMER-134 ADVANVCE.:ORD0471819 8000 CASH
If those order numbers in the data are always the last part after the :
?
SELECT
d.DATE,
GROUP_CONCAT(DISTINCT c.CUSTOMER_NAME) AS CUSTOMER_NAMES,
d.ORDER_NO,
d.AMOUNT,
d.MODE
FROM FULL_DATA d
LEFT JOIN ORDER_DETAILS o
ON o.ORDER_NO = RTRIM(SUBSTRING_INDEX(d.ORDER_NO,':',-1))
LEFT JOIN CUSTOMER_DETAILS c ON c.CUSTOMER_ID = o.CUSTOMER_ID
GROUP BY
d.DATE,
d.ORDER_NO,
d.AMOUNT,
d.MODE
There are multiple items per order.
In theory there could be more than 1 customer per order.
So a GROUP_CONCAT is used here instead of a MAX.
它将从 full_data 表中获取每个订单号,并使用第二个和第三个表查找没有订单的客户详细信息,并在日期列后显示客户名称
I made a join by selecting distinct values for customer_id and order_no from order_detaisl
SELECT f.DATE, CUSTOMER_NAME, f.ORDER_NO, AMOUNT, MODE
FROM FULL_DATA f
JOIN (SELECT DISTINCT customer_id, order_no
FROM ORDER_DETAILS) o ON SUBSTRING_INDEX(f.ORDER_NO,':',-1)= o.ORDER_NO
JOIN CUSTOMER_DETAILS c ON o.CUSTOMER_ID = c.CUSTOMER_ID
WHERE f.DATE BETWEEN '2019-04-01' AND '2019-04-04'
ORDER BY f.DATE ASC
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.