ต้องการ Qury จำนวนครั้งตามเงื่อนไขครับ
กระทู้เก่าบอร์ด อ.Yeadram

 2,387   13
URL.หัวข้อ / URL
ต้องการ Qury จำนวนครั้งตามเงื่อนไขครับ

เงื่อนไขคือ

1. ถ้าภายในวัน มียอดซื้อต่อครั้งมากกว่า 250,000 ก็ให้นับ 1 ครั้ง

สมมุติ

วันที่ 01/04/2013 มียอดซื้อเกิน 250,000 2 รายการ ก็ให้เป็น 2 ครั้ง
วันที่ 02/04/2013 มียอดซื้อเกิน 250,000 อีก 1 รายการ ก็นับเป็น 3 ครั้ง
วันที่ 03/04/2013 มียอดซื้อไม่ถึง 250,000 แต่มีหลายยอดรวมกันแล้วเกิน 250,000 ก็ให้นับเป็น 4 ครั้ง
วันที่ 04/04/2013 มียอดซื้อไม่ถึง 250,000 มีหลายยอดแต่รวมกันไม่ถึง 250,000 ก็ให้นับเป็น 4 ครั้งเท่าเดิม

2. ถ้าภายใน 1 วัน มียอดซื้อไม่ถึง 250,000 หรือมีหลายยอดรวมกันแล้วก็ไม่ถึง 250,000 ก็ให้นับเป็น 0 ครั้ง

เราจะเขียน Qury ยังไงครับ รบกวนด้วยครับ

13 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R16340
[URL=Link ดาวน์โหลด[/URL]
2 @R16341

3 @R16346
ผมไม่สะดวก download file นะครับ เพราะเข้าไปแล้วบาง web ให้ register หรือมีปุ่มหลอกดูแล้วงงครับ รบกวนวางใน accboard@gmail ด้วยครับ

คำตอบที่นึกได้ครับ
Select Count(*)
From tb_Order
Group By OrderDate
Having Sum(OrderAmount) > 250000
4 @R16348
ขออภัยครับ ตกเงื่อนไขไปหน่อยครับ

เงื่อนไขคือ

1. ถ้าภายในวัน ลูกค้า 1 รายมียอดซื้อต่อครั้งมากกว่า 250,000 ก็ให้นับ 1 ครั้ง

สมมุติ

วันที่ 01/04/2013 นาย ก.มียอดซื้อเกิน 250,000 2 รายการ ก็ให้คิด นาย ก. เป็น 2 ครั้ง
วันที่ 02/04/2013 นาย ก.มียอดซื้อเกิน 250,000 อีก 1 รายการ ก็นับเป็น 3 ครั้ง
วันที่ 03/04/2013 นาย ก. มียอดซื้ออีกและไม่ถึง 250,000 แต่มีหลายยอดรวมกันแล้วเกิน 250,000 ก็ให้นับเป็น 4 ครั้ง
วันที่ 04/04/2013 นาย ก. มียอดซื้อไม่ถึง 250,000 มีหลายยอดแต่รวมกันไม่ถึง 250,000 ก็ให้นับเป็น 4 ครั้งเท่าเดิม

2. ถ้าภายใน 1 วัน นาย ก. มียอดซื้อไม่ถึง 250,000 หรือมีหลายยอดรวมกันแล้วก็ไม่ถึง 250,000 ก็ให้นับเป็น 0 ครั้ง
5 @R16349
Select CustomerNo, Count(*)
From tb_Order
Group By CustomerNo, OrderDate
Having Sum(OrderAmount) > 250000
6 @R16350
ผมส่ง ไฟล์ไปทาง Email ให้คุณ Pichai แล้วนะครับ
7 @R16351
Sql ที่ให้มาคำตอบ ยังไม่ตรงตามที่ต้องการครับ

ความต้องการคือ มีข้อมูล 30 Record ผลลัพธ์ออกก็ยังคงมี 30 Record ครบครับ แต่เพิ่มฟิลด์ แจ้งเพิ่มว่านับเป็นกี่ครั้งครับ
8 @R16352
สมมุติว่ามีข้อมูลอยู่ 10 รายการ และอยู่ภายในช่วงเวลา 5 วัน คำตอบสุดท้ายที่ออกมา จะต้องแสดง 5 รายการตามจำนวนวันใช่หรือเปล่าครับ ส่วนแต่ละวันจะนับได้กี่ครั้ง ก็แล้วแต่เงื่อนไขที่กำหนดไว้ว่าเกิน 25,000 หรือเปล่า
9 @R16355
- ตามความเข้าใจ เท่าที่อ่านจะมี ผลลัพธ์ที่ต้องการอยู่ 2 ค่า ที่เราต้องหามาก่อน คือ [ยอดเกิน 250K/ครั้ง] และ [ยอดรวมเกิน 250K/วัน]
- เมื่อได้ 2 ค่านี้แล้วก็เอามาบวกกัน

* สร้างคิวรี่ใหม่ ใส่ SQL ดังนี้:

SELECT [วันที่], [ชื่อลูกค้า], [ยอดซื้อ],
(SELECT Count([ชื่อลูกค้า])
FROM [TblBuyOver250000] As a
WHERE a.[ยอดซื้อ] >= 250000 AND a.ชื่อลูกค้า = [TblBuyOver250000].[ชื่อลูกค้า] ) AS [ยอดเกิน 250K/ครั้ง],
(SELECT Count([ชื่อลูกค้า])
FROM (SELECT [วันที่], [ชื่อลูกค้า], Sum([ยอดซื้อ]) AS รวมยอดซื้อ
FROM tblBuyOver250000 AS TTT
WHERE [ยอดซื้อ] < 250000
GROUP BY [วันที่], [ชื่อลูกค้า]) As a
WHERE [รวมยอดซื้อ] >= 250000 AND a.[ชื่อลูกค้า] = [TblBuyOver250000].[ชื่อลูกค้า]) AS [ยอดรวมเกิน 250K/วัน],
[ยอดเกิน 250K/ครั้ง]+[ยอดรวมเกิน 250K/วัน] AS [ยอดสะสม]
FROM tblBuyOver250000;


หากใช้ได้ คุณสามารถรวบฟิลด์ [ยอดเกิน 250K/ครั้ง] และ [ยอดรวมเกิน 250K/วัน] ไว้ในฟิลด์ [ยอดสะสม] ได้เลย โดยเขียน SQL ดังนี้:

SELECT tblBuyOver250000.[วันที่], tblBuyOver250000.[รหัสลุกค้า], tblBuyOver250000.[ชื่อลูกค้า], tblBuyOver250000.[ยอดซื้อ],
(SELECT Count([ชื่อลูกค้า])
FROM [TblBuyOver250000] As a
WHERE a.[ยอดซื้อ] >= 250000 AND a.ชื่อลูกค้า = [TblBuyOver250000].[ชื่อลูกค้า] )+(SELECT Count([ชื่อลูกค้า])
FROM (SELECT [วันที่], [ชื่อลูกค้า], Sum([ยอดซื้อ]) AS รวมยอดซื้อ
FROM tblBuyOver250000 AS TTT
WHERE [ยอดซื้อ] < 250000
GROUP BY [วันที่], [ชื่อลูกค้า]) As a
WHERE [รวมยอดซื้อ] >= 250000 AND a.[ชื่อลูกค้า] = [TblBuyOver250000].[ชื่อลูกค้า]) AS ยอดสะสม
FROM tblBuyOver250000;


ปล. ผมไม่รู้ว่าเข้าใจโจทย์ถูกหรือเปล่านะครับ หากไม่ใช่อย่างที่ต้องการไว้รอ อ.PichaiTC ตอบน่าจะดีกว่า เท่าที่ดูมาอาจารย์เก่ง SQL มาก
10 @R16358
ขอบคุณ คุณ TTT / อ.PichaiTC และทุกท่านมากครับ คำตอบของคุณ TTT ใช้ได้ครับ พอเฉลยออกมา ดูมันง่ายจริง ๆ คิดไปซะไกลเลย

ล่าสุดกำลังเขียนเป็น Code เรียกแบบลูปข้อมูลยกใหญ่

ขอบคุณทุก ๆ ท่านมาก ๆ เลยครับ
11 @R16359
ถ้าไป Run กับข้อมูลจริง ๆ แล้วติดตรงไหนจะพยายามดูก่อน ถ้าไม่ได้คงจะมารบกวนอีกครับ ขอบคุณครับ
12 @R16994
รบกวนสอบถามเพิ่มเติมครับ จาก Code นี้ ถ้ามีเงื่อนไขเพิ่มเติมคือ เพิ่มฟิลด์ ประเภท ขึ้นและมีเงื่อนไขว่าต้องเป็นประเภท PR เท่านั้น จะต้องเขียนเพิ่มตรงส่วนไหนครับ ขอบคุณครับ


SELECT tblBuyOver250000.[วันที่], tblBuyOver250000.[รหัสลุกค้า], tblBuyOver250000.[ชื่อลูกค้า], tblBuyOver250000.[ยอดซื้อ],

(SELECT Count([ชื่อลูกค้า])

FROM [TblBuyOver250000] As a

WHERE a.[ยอดซื้อ] >= 250000 AND a.ชื่อลูกค้า = [TblBuyOver250000].[ชื่อลูกค้า] )+(SELECT Count([ชื่อลูกค้า])

FROM (SELECT [วันที่], [ชื่อลูกค้า], Sum([ยอดซื้อ]) AS รวมยอดซื้อ

FROM tblBuyOver250000 AS TTT

WHERE [ยอดซื้อ] < 250000

GROUP BY [วันที่], [ชื่อลูกค้า]) As a

WHERE [รวมยอดซื้อ] >= 250000 AND a.[ชื่อลูกค้า] = [TblBuyOver250000].[ชื่อลูกค้า]) AS ยอดสะสม

FROM tblBuyOver250000;
13 @R17000
รบกวนด้วยครับ ลองทำดูแล้วยังไม่ได้ครับ เงื่อนไขเพิ่มเติมคือ ฟิลด์ประเภท ให้เลือกเฉพาะ ประเภท PR เท่านั้นครับ ขอบคุณครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2928s