กระทู้เก่าบอร์ด อ.Yeadram
1,954 9
URL.หัวข้อ /
URL
เงื่อนไข between ครับ
คือผมมีปัญหาเรื่อง Between #25/7/2554 6:00:00# And #25/7/2554 14:00:00# ผมต้องการทำรายงานเเสดงผลยอดผลิตตั้งเเต่ 6โมงเช้าถึง14.00 น. เเต่ถ้าเเสดงเงื่อนไขแบบที่ได้กล่าวนั้นมันจะโชว์ตั้งเเต่ 6 7 8 9 10 11 12 13 14 เเต่ผมต้องการให้มันสรุปเเค่ 6.00-14.00 น. ภายในบรรทัดเดียวเเล้วได้ผลรวมเท่ากับเงื่่อนไขข้างต้น ผมต้องใช้คำสั่งแบบไหนครับ
รบกวน อ.สุเทพ เเละ User thai-access ช่วยเเนะนำให้ทีครับ
รบกวน อ.สุเทพ เเละ User thai-access ช่วยเเนะนำให้ทีครับ
9 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R10596
ขอบคุณคับ ท่าน weezaa ที่ช่วยตอบ เเต่ผมก็ยังไม่ค่อยเข้าใจ ผมก็ยังทำไม่ได้อยู่ดีอ่ะครับพึ่งเคยทำผมจะพิมพ์ลักษณะงานแบบให้ดูนะครับ
TIME ชื่อเครื่อง สินค้า ยอด
21/7/2554 6:00:00 AA production 10
21/7/2554 7:00:00 AA production 10
21/7/2554 8:00:00 AA production 10
21/7/2554 9:00:00 AA production 10
21/7/2554 14:00:00 AA production 10
ผลรวม 50
นี้คือที่ผมทำได้
**เเต่ที่ผมต้องการให้มันโชว์คือ**
21/7/2557 6:00:00-14:00:00 AA production 50
เพราะเครื่องจักรผลิตเเบ่งเป็น3ก่ะครับผลิต 24ชม.ครับ
ผมจะ query ยังไงดีครับรบกวนช่วยเเนะนำด้วยครับ
ปล. ขอโทษทีครับ อ.สุภาพ พอดีมือใหม่หัดเข้าบอร์ด(เขินเลยผม)
TIME ชื่อเครื่อง สินค้า ยอด
21/7/2554 6:00:00 AA production 10
21/7/2554 7:00:00 AA production 10
21/7/2554 8:00:00 AA production 10
21/7/2554 9:00:00 AA production 10
21/7/2554 14:00:00 AA production 10
ผลรวม 50
นี้คือที่ผมทำได้
**เเต่ที่ผมต้องการให้มันโชว์คือ**
21/7/2557 6:00:00-14:00:00 AA production 50
เพราะเครื่องจักรผลิตเเบ่งเป็น3ก่ะครับผลิต 24ชม.ครับ
ผมจะ query ยังไงดีครับรบกวนช่วยเเนะนำด้วยครับ
ปล. ขอโทษทีครับ อ.สุภาพ พอดีมือใหม่หัดเข้าบอร์ด(เขินเลยผม)
3 @R10597
ต้องสร้าง field อีก 1 field เพื่อแสดง วันที่เวลาตามที่คุณต้องการ
TimeShow: Min([Time]) & " - " & Format(Max([Time]),"Short Time")
ด้านล่างของ field นี้ให้เลือกคำว่า expression ไม่ใช่ groupby ตามค่า default
คุณควรเปลี่ยนชื่อ field "time" เป็นชื่ออื่น
ทั้งนี้คุณต้องแน่ใจนะว่า วันที่ของคุณในแต่ละกะจะเป็นวันเดียวกันเสมอไป
format ก็ทำให้ดูเป็นตัวอย่าง
ทั้งหลายทั้งปวงคุณอาจต้องปรับแต่งเอาเองอีกนิดหน่อย เช่น
shorttime คุณต้องเปลี่ยนเป็น hh:mm:ss ถ้าคุณต้องการแสดงระดับวินาที
TimeShow: Min([Time]) & " - " & Format(Max([Time]),"Short Time")
ด้านล่างของ field นี้ให้เลือกคำว่า expression ไม่ใช่ groupby ตามค่า default
คุณควรเปลี่ยนชื่อ field "time" เป็นชื่ออื่น
ทั้งนี้คุณต้องแน่ใจนะว่า วันที่ของคุณในแต่ละกะจะเป็นวันเดียวกันเสมอไป
format ก็ทำให้ดูเป็นตัวอย่าง
ทั้งหลายทั้งปวงคุณอาจต้องปรับแต่งเอาเองอีกนิดหน่อย เช่น
shorttime คุณต้องเปลี่ยนเป็น hh:mm:ss ถ้าคุณต้องการแสดงระดับวินาที
4 @R10600
- เปลี่ยนชื่อฟิลด์ของคุณจากคำว่า TIME เป็น mcTime (คำว่า Time เป็นคำสงวนของระบบ)
- รวบรวมคำตอบและความเห็นของคุณ weeza และคุณ Nova พร้อมทั้งความต้องการของคุณมะนาว เอามาเขียนเป็น SQL statement ได้ดังนี้
select xx, [ชื่อเครื่อง], [สินค้า], sum([ยอด]) as Total
from table1
where mcTime between [ระบุวัน-เวลาเริ่มต้น ตามรูปแบบ dd/mm/yyyy hh:mm:ss] and [ระบุวัน-เวลาสิ้นสุด ตามรูปแบบ dd/mm/yyyy hh:mm:ss]
group by xx, [ชื่อเครื่อง], [สินค้า];
****ให้แทนที่ xx ด้วย format(cdate([ระบุวัน-เวลาเริ่มต้น ตามรูปแบบ dd/mm/yyyy hh:mm:ss]),"dd/mm/yyyy hh:mm:ss") & " - " & format(cdate([ระบุวัน-เวลาสิ้นสุด ตามรูปแบบ dd/mm/yyyy hh:mm:ss]),"dd/mm/yyyy hh:mm:ss")
1) ให้สร้างคิวรี่ใหม่ 1 ตัว เปิดมุมมอง SQL
2) เอา statement (แทนที่คำให้เรียบร้อย) นี้ไปวาง
3) เปลี่ยนมุมมองเป็น มุมมองแผ่นข้อมูล ถ้าไม่มีปัญหาอะไร ให้ทำข้อ 4) - 5)
4) เปลี่ยนมุมมองเป็น มุมมองออกแบบ เพื่อศึกษาทำความเข้าใจ
5) บันทึกคิวรี่นี้ไว้ใช้งานครั้งต่อไป
ถ้าในข้อ 3) มีปัญหาให้ตรวจสอบชื่อฟิลด์ต่างๆ ของคุณ ว่าเขียนหรือปรับเปลี่ยนประยุกต์ได้ถูกต้องทุกจุดหรือไม่ ถ้าปรับเปลี่ยนแล้วให้กลับไปเริ่ม ข้อ 1) ใหม่อีกครั้ง
ถ้ายังพบปัญหาให้แจ้งปัญหามาใหม่อีกครั้งครับ
- รวบรวมคำตอบและความเห็นของคุณ weeza และคุณ Nova พร้อมทั้งความต้องการของคุณมะนาว เอามาเขียนเป็น SQL statement ได้ดังนี้
select xx, [ชื่อเครื่อง], [สินค้า], sum([ยอด]) as Total
from table1
where mcTime between [ระบุวัน-เวลาเริ่มต้น ตามรูปแบบ dd/mm/yyyy hh:mm:ss] and [ระบุวัน-เวลาสิ้นสุด ตามรูปแบบ dd/mm/yyyy hh:mm:ss]
group by xx, [ชื่อเครื่อง], [สินค้า];
****ให้แทนที่ xx ด้วย format(cdate([ระบุวัน-เวลาเริ่มต้น ตามรูปแบบ dd/mm/yyyy hh:mm:ss]),"dd/mm/yyyy hh:mm:ss") & " - " & format(cdate([ระบุวัน-เวลาสิ้นสุด ตามรูปแบบ dd/mm/yyyy hh:mm:ss]),"dd/mm/yyyy hh:mm:ss")
1) ให้สร้างคิวรี่ใหม่ 1 ตัว เปิดมุมมอง SQL
2) เอา statement (แทนที่คำให้เรียบร้อย) นี้ไปวาง
3) เปลี่ยนมุมมองเป็น มุมมองแผ่นข้อมูล ถ้าไม่มีปัญหาอะไร ให้ทำข้อ 4) - 5)
4) เปลี่ยนมุมมองเป็น มุมมองออกแบบ เพื่อศึกษาทำความเข้าใจ
5) บันทึกคิวรี่นี้ไว้ใช้งานครั้งต่อไป
ถ้าในข้อ 3) มีปัญหาให้ตรวจสอบชื่อฟิลด์ต่างๆ ของคุณ ว่าเขียนหรือปรับเปลี่ยนประยุกต์ได้ถูกต้องทุกจุดหรือไม่ ถ้าปรับเปลี่ยนแล้วให้กลับไปเริ่ม ข้อ 1) ใหม่อีกครั้ง
ถ้ายังพบปัญหาให้แจ้งปัญหามาใหม่อีกครั้งครับ
5 @R10602
ขอบคุณ ท่าน nova กับ yeadram มาครับ คือ ตารางผมมีชื่อดังนี้
ชื่อตาราง PDT_DATA ครับ
TIME_STAMP PDT_NAME MODEL_IT Actual
21/7/2554 6:00:00 AA production 10
21/7/2554 7:00:00 AA production 10
21/7/2554 8:00:00 AA production 10
21/7/2554 9:00:00 AA production 10
21/7/2554 14:00:00 AA production 10
ผลรวม 50
ผมจะต้อง query ยังไงดีอ่ะครับประยุกต์ตามที่ท่าน yeadram เเล้วมันก็ไม่ได้อ่ะครับ ผมพึ่งจับ access เป็นครั้งเเรกเลยไม่ค่อยรู้เรื่องยังไงกก็รบกวนหน่อยนะครับ
ชื่อตาราง PDT_DATA ครับ
TIME_STAMP PDT_NAME MODEL_IT Actual
21/7/2554 6:00:00 AA production 10
21/7/2554 7:00:00 AA production 10
21/7/2554 8:00:00 AA production 10
21/7/2554 9:00:00 AA production 10
21/7/2554 14:00:00 AA production 10
ผลรวม 50
ผมจะต้อง query ยังไงดีอ่ะครับประยุกต์ตามที่ท่าน yeadram เเล้วมันก็ไม่ได้อ่ะครับ ผมพึ่งจับ access เป็นครั้งเเรกเลยไม่ค่อยรู้เรื่องยังไงกก็รบกวนหน่อยนะครับ
6 @R10604
เปิด query ในมุมมอง SQL แล้ว copy code นี้ไปวาง
SELECT PDT_Data.Pdt_Name, PDT_Data.Model_IT, Sum(PDT_Data.Actual) AS SumOfNoMachine, Min([Time_Stamp]) & " - " & Format(Max([Time_Stamp]),"Short Time") AS TimeShow
FROM PDT_Data
WHERE (((PDT_Data.Time_Stamp) Between #1/21/2011 6:0:0# And #1/21/2011 14:0:0#))
GROUP BY PDT_Data.Pdt_Name, PDT_Data.Model_IT;
SELECT PDT_Data.Pdt_Name, PDT_Data.Model_IT, Sum(PDT_Data.Actual) AS SumOfNoMachine, Min([Time_Stamp]) & " - " & Format(Max([Time_Stamp]),"Short Time") AS TimeShow
FROM PDT_Data
WHERE (((PDT_Data.Time_Stamp) Between #1/21/2011 6:0:0# And #1/21/2011 14:0:0#))
GROUP BY PDT_Data.Pdt_Name, PDT_Data.Model_IT;
7 @R10605
ขอบคุณมากครับ คุณ Nova สำหรับ query ใช้ได้เเล้วครับ เเล้วถ้าผมต้องการ ซ้อน between ให้โชว์ช่วงเวลา 3 กะ ล่ะครับ เช่น
TIME_STAMP PDT_NAME MODEL_IT Actual
21/7/2554 6:00:00-14:00 AA production 50
21/7/2554 14:00:00-22:00 AA production 50
21/7/2554 22:00:00-23:45:00 AA production 50
ผมจะสามารถซ้อน between ได้ไหมครับรบกวนช่วยเเนะนำด้วยนะครับขอบคุณครับ
TIME_STAMP PDT_NAME MODEL_IT Actual
21/7/2554 6:00:00-14:00 AA production 50
21/7/2554 14:00:00-22:00 AA production 50
21/7/2554 22:00:00-23:45:00 AA production 50
ผมจะสามารถซ้อน between ได้ไหมครับรบกวนช่วยเเนะนำด้วยนะครับขอบคุณครับ
8 @R10606
เอา query มา UNION กัน โดยเปลี่ยนเงื่อนไขเวลาในบรรทัด WHERE
SELECT....FROM...
WHERE....วันเวลาตามเงื่อนไขที่1
GROUP BY.....
UNION
SELECT....FROM...
WHERE....วันเวลาตามเงื่อนไขที่2
GROUP BY.....
SELECT....FROM...
WHERE....วันเวลาตามเงื่อนไขที่3
GROUP BY.....;
จริงๆแล้วเงื่อไขควรอยู่ในรูปตัวแปร แต่ผมไม่รู้องค์ประกอบอื่นๆ
ยังไงก็ลองปรับเปลี่ยนดูนะครับ
SELECT....FROM...
WHERE....วันเวลาตามเงื่อนไขที่1
GROUP BY.....
UNION
SELECT....FROM...
WHERE....วันเวลาตามเงื่อนไขที่2
GROUP BY.....
SELECT....FROM...
WHERE....วันเวลาตามเงื่อนไขที่3
GROUP BY.....;
จริงๆแล้วเงื่อไขควรอยู่ในรูปตัวแปร แต่ผมไม่รู้องค์ประกอบอื่นๆ
ยังไงก็ลองปรับเปลี่ยนดูนะครับ
9 @R10622
ขอบคุณมากครับ ท่าน Nova ที่เเนะนำทุกขั้นตอนเลย
Time: 0.3137s
แล้วก็ใส่เงื่อนไขตามนั้น
ปล. อ.สุเทพ ไม่มีนะครับ