รบกวนช่วยเขียน SQL ดึงข้อมูลหน่อยครับ
กระทู้เก่าบอร์ด อ.Yeadram

 3,453   28
URL.หัวข้อ / URL
รบกวนช่วยเขียน SQL ดึงข้อมูลหน่อยครับ

คือผมมีข้อมูลอยู่ 5 ฟิลด์ คือ

1. วันที่
2. รหัสลูกค้า
3. ชื่อลูกค้า
4. ชื่อ Sale
5. จำนวนเงิน

โดยมีเงื่อนไขดังนี้ครับ ภายใน 1 วัน ถ้า Sale มีการขายของให้ลูกค้าได้กี่คนก็ตามรวมกันภายในหนึ่งวันถ้ามากกว่าหรือเท่ากับ 10,000,000 ให้นับ 1 ถ้า 5 วัน มีวันพุธวันเดียวที่ขายไม่ถึง 10 ล้าน ก็จะนับได้ทั้งหมด 4 ครั้งครับ จะได้ผลลัพธ์ประมาณนี้

    วันที่        รหัสลูกค้า       ชื่อลูกค้า           ชื่อ Sale      จำนวนเงิน    จำนวน
01/09/56     123456          นาย ก.            นาง เอ       1,000,000       1
01/09/56     123457          นาย ข.            นาง เอ       9,000,000       1
02/09/56     123456          นาย ก.            นาง บี       10,000,000      5
03/09/56     123457          นาย ข.            นาง บี        3,000,000      5
03/09/56     123458          นาย ค.            นาง บี        7,000,000      5
04/09/56     123456          นาย ก.            นาง บี       10,000,000      5
05/09/56     123459          นาย ง.             นาง บี      50,000,000      5
06/09/56     123456          นาย ก.             นาง บี        7,000,000      5
06/09/56     123457          นาย ข.             นาง บี        9,000,000      5
07/09/56     123456          นาย ก.             นาง บี       9,500,000       5

รบกวนด้วยครับ ขอบคุณครับ

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

1 @R17203
เป็นการแสดงข้อมูลที่ไม่ค่อยถูกต้องเท่าไรครับ ควรแยก Query แล้วแสดงผลใน Report ที่มีการ Group จะดีกว่า

แต่ถ้าจะให้ได้ผลเป็น recordset เดียว
ก็ประมาณนี้ครับ

Select a.วันที่, a.รหัสลูกค้า, a.ชื่อลูกค้า, a.Sale, a.จำนวนเงิน, Iif(SumAmount > 10000000, 0,
(
Select Count(*)
From Table
Where วันที่ >= #1/9/56# And วันที่ <= #7/9/56#
Group By วันที่, รหัสลูกค้า
)
)
From Table As a
Inner Join
(
Select รหัสลูกค้า, Sum(จำนวนเงิน) As SumAmount
From Table
Where วันที่ >= #1/9/56# And วันที่ <= #7/9/56#
Group By รหัสลูกค้า
) As s
On a.รหัสลูกค้า = s.รหัสลูกค้า
Where a.วันที่ >= #1/9/56# And a.วันที่ <= #7/9/56#
2 @R17209
ืคือเรื่องวันที่ตามฐานข้อมูลจริง ๆ จะมีมากกว่านี้เยอะครับ ไม่ใช่แค่ 01-07/09/2556 เท่านั้นครับ ขอบคุณครับ
3 @R17211
แยกเป็น Query ก็ได้ครับ ขอบคุณมากครับ
4 @R17212


ไม่ผ่านครับ โปรแกรมแจ้ง Syntax Error ตามรูปครับ รบกวนด้วยครับ
5 @R17213
ขอโทษนะครับ

ผมพยายามทำความเข้าใจโจทย์มาหลายวันแล้ว

ขอถามรายละเอียดเพื่อทำความเข้าใจหน่อยนะครับ

สิ่งที่ต้องการคือ วันไหนยอดรวมการขาย >= 10,000,000 ให้นับ 1
วันไหนยอดขายรวมทุกรายการ <= 10,000,000 ให้นับ 0

ใช่ไหมครับ

แล้วยังสามารถนับจำนวนครั้งที่ขายได้ >= 10,000,000 ในช่วงเวลาที่กำหนดได้ด้วย

ผมเข้าใจถูกไหมครับ
6 @R17215
สงสัยว่าผมตีโจทย์ผิดครับ
7 @R17217
ขออภัยครับ ที่อธิบายไม่เคลีย์

1. ถ้าเซลคนไหนขายสินค้าภายใน 1 วันยอดรวมกันได้เกิน 10 ล้านบาท (ไม่ว่าจะขายให้ลูกค้ากี่รายก็ตามให้นับยอดขายรวมกัน ภายในแต่ละวัน) ให้นับเป็น 1 ครั้ง (ยอดสะสม)

2. ถ้าวันไหนมียอดขายรวมกันไม่ถึง 10 ล้านบาท ก็ให้นับเป็น 0 ครั้ง (ยอดสะสม)

3. ถ้าวันที่ 1 - 5 ขายสินค้า (ยอดรวมกันของแต่ละวัน) มากกว่าหรือเท่ากับ 10 ล้านบาท ก็จะได้ ยอดสะสมเป็น 5 แต่พอมาวันที่ 6 -10 ขายสินค้า (ยอดรวมกันของแต่ละวัน) มากกว่าหรือเท่ากับ 10 ล้านบาท แค่ 4 ครั้ง ก็จะได้ยอดสะสมทั้ง ของเดิม 5 + 4 เป็น 9 ครับ

แต่เวลาคิด คิดทีเดียวเลยครับไม่ต้องคิดแยก แค่สมมุติให้เห็นถึงความแตกต่างเท่านั้นครับ ขอบคุณครับ

ปล. ไม่เข้าใจอะไรตรงไหนรบกวนสอบถามเพิ่มเติมได้ครับ และต้องขออภัยด้วยครับ ขอบคุณอีกครั้งครับ
8 @R17221
ถ้างั้นคือต้องการคำตอบเป็นเลขตัวเดียวเลยใช่ไหมครับ

เช่น Run Query ดึงข้อมูลระหว่างวันที่ 1 ถึงวันที่ 10 (ของพนักงงานขายที่ระบุ)

ถ้าได้เป็น 10 คือ ขายได้ >= 10 ล้านทุกวัน

ถ้าได้เป็น 9 หมายความว่ามีอยู่ 1 วันที่ยอดรวมการขาย(ทั้งวัน) ได้ไม่ถึง 10 ล้าน โดยไม่สนใจว่าวันไหนที่ขายได้ไม่ถึง 10 ล้าน

เข้าใจแบบนี้ถูกไหมครับ


9 @R17224
ถูกต้องเลยครับ คุณธัชชัย

ถ้ากรณีที่มี 10 วัน แล้วยอดขายรวม แต่ละวันเกิน 10 ล้านอยู่ 9 วัน การแสดงก็ต้องแสดงทั้ง 10 วันนั้นครบถ้วน เพียงแต่ยอดสะสมได้แค่ 9 วันเท่านั้นครับ

ตอนนี้ผมก็พยายามทำอยู่แต่ก็ไม่สำเร็จสักที ขอบคุณครับ
10 @R17225
OK เข้าใจล่ะ

เท่าที่คิดตอนนี้คงต้องใช้ Query ซ้อน Query เดี๋ยวคืนนี้จะทำตัวอย่างให้นะครับ

(ต้องฟ้ามืด ถึงคิด Query ออก)
11 @R17226
ผมว่าบางทีโจทย์มันก็ทำให้ยิ่งงง ทั้งๆที่ตรรกะจริงๆอาจไม่ซับซ้อนอย่างที่อธิบายอะครับ

ลองเขียนอย่างนี้ดูครับ ผมรวบให้เลยนะครับ เป็นซับคิวรี่ ลองทำความเข้าใจดูก่อนนะครับ

SELECT T1.[วันที่], T1.[รหัสลูกค้า], T1.[ชื่อลูกค้า], T1.[ชื่อ Sale], T1.[จำนวนเงิน], (SELECT Count([ชื่อ Sale])
FROM (SELECT [วันที่], [ชื่อ Sale], Sum([จำนวนเงิน]) AS TolPrice
FROM T1 AS TTT
GROUP BY [วันที่], [ชื่อ Sale]) As a
WHERE [TolPrice] >= 10000000 AND a.[ชื่อ Sale] = [T1].[ชื่อ Sale]) AS [ยอดรวมเกิน 10M/วัน]
FROM T1;

ทดสอบดูครับ ว่าตรงตามความต้องการหรือเปล่า
12 @R17227
ทดสอบตอนนี้ถูกต้องเลยครับ เดี๋ยวจะเอาไปทดสอบกับฐานข้อมูลจริง ๆ แล้วจะกลับมาแจ้งผลอีกรอบครับ

ส่วนคุณธัชชัย ผมรบกวนด้วย คืออยากเห็นอีกวิธีเผื่อว่าจะนำไปใช้กับตัวอื่นได้ครับ และต้องขออภัยด้วยครับที่อธิบายซับซ้อนเกิน เพราะกลัวจะไม่เข้าใจเงื่อนไข ขอบคุณทุกท่านมากครับ
13 @R17228
ผมทำเสร็จแล้วนะครับ
ใช้ 2 Query กับอีก 1 ฟอร์ม

แต่ท่าทาง SQL ข้างบนจะสะดวกกว่านะครับ

ถ้าสนใจไฟล์ เดี๋ยวจะส่งให้ครับ (ว่าแต่ส่งยังไงดี)
14 @R17229
yui2513@gmail.com ส่งมาทางนี้ก็ได้ครับ ขอบคุณครับ
15 @R17230
ผมขอนับถือนำใจคุณ ธัชชัย นะครับ สังคมเราต้องการคนแบบคุณครับ
16 @R17231
ส่งไปแล้วนะครับ
ไฟล์ทำด้วย Access 2013 นะครับ
17 @R17232
ขอบคุณ คุณ TTT ครับ ที่เห็นความความสำคัญของสิ่งเล็กๆ น้อยๆ นี้

^_^
18 @R17233
ขอบคุณมากครับทุก ๆ ท่าน

แต่พอได้อย่างที่ต้องการแล้วเพิ่งมานึกได้ ว่าต้องดักทาง Sale ด้วย คือ

1. อยากให้เช็คว่า ชื่อลูกค้ากับชื่อ Salse ห้ามตรงกันครับ
2. เพิ่มฟิลด์ประเภทสินค้ามาอีกตัว คือ จะต้องเป็น Computer หรือ มือถือเท่านั้น

ตอนนี้คิดได้ก็คือต้องทำ Query อีกตัวขึ้นก่อน โดยใส่เงื่อนไขตามข้อ 1-2 แต่จะพยายามทำให้เป็นตัวเดียวอยู่ครับ รบกวนด้วยครับ ขอบคุณครับ
19 @R17234
ผมได้รับไฟล์แล้วนะครับ คุณธัชชัย แต่ผมลืมบอกไปอย่างหนึ่ง ผมใช้ Version 2003 ครับ รบกวนอีกครั้งนะครับ ขอบคุณครับ
20 @R17235
อ้าว 2003 งั้นเดี๋ยวทำให้ใหม่ครับ เพราะผมใช้ Feature ของ 2013 ซะจนแปลงเป็น 2003 ไม่ได้เลย รอแป๊บนะครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2567s