กระทู้เก่าบอร์ด อ.Yeadram
3,651 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
รบกวนด้วยครับ ขอบคุณครับ
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
2 @R17209
ืคือเรื่องวันที่ตามฐานข้อมูลจริง ๆ จะมีมากกว่านี้เยอะครับ ไม่ใช่แค่ 01-07/09/2556 เท่านั้นครับ ขอบคุณครับ
3 @R17211
แยกเป็น Query ก็ได้ครับ ขอบคุณมากครับ
4 @R17212
ไม่ผ่านครับ โปรแกรมแจ้ง Syntax Error ตามรูปครับ รบกวนด้วยครับ
ไม่ผ่านครับ โปรแกรมแจ้ง Syntax Error ตามรูปครับ รบกวนด้วยครับ
5 @R17213
ขอโทษนะครับ
ผมพยายามทำความเข้าใจโจทย์มาหลายวันแล้ว
ขอถามรายละเอียดเพื่อทำความเข้าใจหน่อยนะครับ
สิ่งที่ต้องการคือ วันไหนยอดรวมการขาย >= 10,000,000 ให้นับ 1
วันไหนยอดขายรวมทุกรายการ <= 10,000,000 ให้นับ 0
ใช่ไหมครับ
แล้วยังสามารถนับจำนวนครั้งที่ขายได้ >= 10,000,000 ในช่วงเวลาที่กำหนดได้ด้วย
ผมเข้าใจถูกไหมครับ
ผมพยายามทำความเข้าใจโจทย์มาหลายวันแล้ว
ขอถามรายละเอียดเพื่อทำความเข้าใจหน่อยนะครับ
สิ่งที่ต้องการคือ วันไหนยอดรวมการขาย >= 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 ครับ
แต่เวลาคิด คิดทีเดียวเลยครับไม่ต้องคิดแยก แค่สมมุติให้เห็นถึงความแตกต่างเท่านั้นครับ ขอบคุณครับ
ปล. ไม่เข้าใจอะไรตรงไหนรบกวนสอบถามเพิ่มเติมได้ครับ และต้องขออภัยด้วยครับ ขอบคุณอีกครั้งครับ
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 ล้าน
เข้าใจแบบนี้ถูกไหมครับ
เช่น Run Query ดึงข้อมูลระหว่างวันที่ 1 ถึงวันที่ 10 (ของพนักงงานขายที่ระบุ)
ถ้าได้เป็น 10 คือ ขายได้ >= 10 ล้านทุกวัน
ถ้าได้เป็น 9 หมายความว่ามีอยู่ 1 วันที่ยอดรวมการขาย(ทั้งวัน) ได้ไม่ถึง 10 ล้าน โดยไม่สนใจว่าวันไหนที่ขายได้ไม่ถึง 10 ล้าน
เข้าใจแบบนี้ถูกไหมครับ
9 @R17224
ถูกต้องเลยครับ คุณธัชชัย
ถ้ากรณีที่มี 10 วัน แล้วยอดขายรวม แต่ละวันเกิน 10 ล้านอยู่ 9 วัน การแสดงก็ต้องแสดงทั้ง 10 วันนั้นครบถ้วน เพียงแต่ยอดสะสมได้แค่ 9 วันเท่านั้นครับ
ตอนนี้ผมก็พยายามทำอยู่แต่ก็ไม่สำเร็จสักที ขอบคุณครับ
ถ้ากรณีที่มี 10 วัน แล้วยอดขายรวม แต่ละวันเกิน 10 ล้านอยู่ 9 วัน การแสดงก็ต้องแสดงทั้ง 10 วันนั้นครบถ้วน เพียงแต่ยอดสะสมได้แค่ 9 วันเท่านั้นครับ
ตอนนี้ผมก็พยายามทำอยู่แต่ก็ไม่สำเร็จสักที ขอบคุณครับ
10 @R17225
OK เข้าใจล่ะ
เท่าที่คิดตอนนี้คงต้องใช้ Query ซ้อน Query เดี๋ยวคืนนี้จะทำตัวอย่างให้นะครับ
(ต้องฟ้ามืด ถึงคิด Query ออก)
เท่าที่คิดตอนนี้คงต้องใช้ 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;
ทดสอบดูครับ ว่าตรงตามความต้องการหรือเปล่า
ลองเขียนอย่างนี้ดูครับ ผมรวบให้เลยนะครับ เป็นซับคิวรี่ ลองทำความเข้าใจดูก่อนนะครับ
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 ข้างบนจะสะดวกกว่านะครับ
ถ้าสนใจไฟล์ เดี๋ยวจะส่งให้ครับ (ว่าแต่ส่งยังไงดี)
ใช้ 2 Query กับอีก 1 ฟอร์ม
แต่ท่าทาง SQL ข้างบนจะสะดวกกว่านะครับ
ถ้าสนใจไฟล์ เดี๋ยวจะส่งให้ครับ (ว่าแต่ส่งยังไงดี)
14 @R17229
yui2513@gmail.com ส่งมาทางนี้ก็ได้ครับ ขอบคุณครับ
15 @R17230
ผมขอนับถือนำใจคุณ ธัชชัย นะครับ สังคมเราต้องการคนแบบคุณครับ
16 @R17231
ส่งไปแล้วนะครับ
ไฟล์ทำด้วย Access 2013 นะครับ
ไฟล์ทำด้วย Access 2013 นะครับ
17 @R17232
ขอบคุณ คุณ TTT ครับ ที่เห็นความความสำคัญของสิ่งเล็กๆ น้อยๆ นี้
^_^
^_^
18 @R17233
ขอบคุณมากครับทุก ๆ ท่าน
แต่พอได้อย่างที่ต้องการแล้วเพิ่งมานึกได้ ว่าต้องดักทาง Sale ด้วย คือ
1. อยากให้เช็คว่า ชื่อลูกค้ากับชื่อ Salse ห้ามตรงกันครับ
2. เพิ่มฟิลด์ประเภทสินค้ามาอีกตัว คือ จะต้องเป็น Computer หรือ มือถือเท่านั้น
ตอนนี้คิดได้ก็คือต้องทำ Query อีกตัวขึ้นก่อน โดยใส่เงื่อนไขตามข้อ 1-2 แต่จะพยายามทำให้เป็นตัวเดียวอยู่ครับ รบกวนด้วยครับ ขอบคุณครับ
แต่พอได้อย่างที่ต้องการแล้วเพิ่งมานึกได้ ว่าต้องดักทาง Sale ด้วย คือ
1. อยากให้เช็คว่า ชื่อลูกค้ากับชื่อ Salse ห้ามตรงกันครับ
2. เพิ่มฟิลด์ประเภทสินค้ามาอีกตัว คือ จะต้องเป็น Computer หรือ มือถือเท่านั้น
ตอนนี้คิดได้ก็คือต้องทำ Query อีกตัวขึ้นก่อน โดยใส่เงื่อนไขตามข้อ 1-2 แต่จะพยายามทำให้เป็นตัวเดียวอยู่ครับ รบกวนด้วยครับ ขอบคุณครับ
19 @R17234
ผมได้รับไฟล์แล้วนะครับ คุณธัชชัย แต่ผมลืมบอกไปอย่างหนึ่ง ผมใช้ Version 2003 ครับ รบกวนอีกครั้งนะครับ ขอบคุณครับ
20 @R17235
อ้าว 2003 งั้นเดี๋ยวทำให้ใหม่ครับ เพราะผมใช้ Feature ของ 2013 ซะจนแปลงเป็น 2003 ไม่ได้เลย รอแป๊บนะครับ
Time: 0.3036s
แต่ถ้าจะให้ได้ผลเป็น 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#