BMS-HOSxP Community
HOSxP => การเขียน SQL Script => ข้อความที่เริ่มโดย: natch2005 ที่ สิงหาคม 18, 2010, 09:56:02 AM
-
SELECT
Sum(`dtdetail2`.`dtvalue`)
FROM
`dtmain`
Inner Join `dtdetail2` ON `dtdetail2`.`vn` = `dtmain`.`vn`
WHERE
`dtmain`.`vstdate` BETWEEN '2010-06-01' AND '2010-06-31' AND
(`dtdetail2`.`dtcode` = '405' OR
`dtdetail2`.`dtcode` = '410' OR
`dtdetail2`.`dtcode` = '416' OR
`dtdetail2`.`dtcode` = '421')
ผมจะ sum แต่ต้อง group by dtdetail2.vn ต้องเขียน sql อย่างไรครับ
ขอบคุณครับ
-
ก็สามารภใส่ group by dtdetail2.vn ไว้ท้ายสุดได้เลยครับ
-
ขอบคุณครับ แต่ยังไม่ถูกครับ คือ อยากได้เป็นตัวเลข ผลรวมแล้วนะครับ ถ้าทำแบบนั้นมันจะได้เป็น reccord ครับ เช่น ได้เป็นผลรวม 320 อะไรประมาณนี้นะครับ
-
ขอคำอธิบายมากกว่านี้อีกนิดครับคือผมงงกับคำอธิบายนี้ครับ
รบกวนบอกความต้องการอีกสักหน่อยจะได้ช่วยได้ครับ
-
... ถ้าต้องการได้ผลรวมของจำนวนใน dtvalue ของตาราง dtdetail2 โดยแยกเป็นราย vn และดูจากวันที่ที่มารับบริการด้วย
อย่างแรกเลยคงจะใช้การ join กับตาราง dtmain เพื่อนำวันที่รับบริการมาใช้ไม่ได้หรอกครับ เพราะข้อมูลที่ได้ออกมาจะผิดพลาดได้
เนื่องจากทั้งตาราง dtdetail2 และ dtmain ใน 1 vn อาจมีข้อมูลอยูในตารางอยู่มากกว่า 1 record ได้ครับ
ถ้า vn นั้นๆ มีอยู่แค่ตารางละ 1 record ก็ไม่เป็นไร แต่ถ้าสมมุติว่า vn นั้นมีข้อมูลอยู่ใน dtdetail2 และ dtmain ตารางละ 2 record เวลา join กันแล้วข้อมูลที่ได้ออกมาจะมี 4 record ครับ ไม่ใช่ 2 record ผลรวมของจำนวนใน dtvalue ที่ได้ออกมาก็จะมากเกินความเป็นจริงครับ
ถ้าต้องการใช้วันที่ที่มารับบริการด้วย ใช้การ join จากตาราง ovst ก็ได้ครับ ลองใช้คำสั่งตามข้างล่างดูนะครับ
select d.vn,sum(d.dtvalue)
from dtdetail2 d,ovst o
where o.vstdate between '2006-04-01' and '2006-06-30'
and d.vn = o.vn
and d.dtcode in ('405','410','416','421')
group by d.vn
... :D ...
-
... ถ้าต้องการได้ผลรวมของจำนวนใน dtvalue ของตาราง dtdetail2 โดยแยกเป็นราย vn และดูจากวันที่ที่มารับบริการด้วย
อย่างแรกเลยคงจะใช้การ join กับตาราง dtmain เพื่อนำวันที่รับบริการมาใช้ไม่ได้หรอกครับ เพราะข้อมูลที่ได้ออกมาจะผิดพลาดได้
เนื่องจากทั้งตาราง dtdetail2 และ dtmain ใน 1 vn อาจมีข้อมูลอยูในตารางอยู่มากกว่า 1 record ได้ครับ
ถ้า vn นั้นๆ มีอยู่แค่ตารางละ 1 record ก็ไม่เป็นไร แต่ถ้าสมมุติว่า vn นั้นมีข้อมูลอยู่ใน dtdetail2 และ dtmain ตารางละ 2 record เวลา join กันแล้วข้อมูลที่ได้ออกมาจะมี 4 record ครับ ไม่ใช่ 2 record ผลรวมของจำนวนใน dtvalue ที่ได้ออกมาก็จะมากเกินความเป็นจริงครับ
ถ้าต้องการใช้วันที่ที่มารับบริการด้วย ใช้การ join จากตาราง ovst ก็ได้ครับ ลองใช้คำสั่งตามข้างล่างดูนะครับ
select d.vn,sum(d.dtvalue)
from dtdetail2 d,ovst o
where o.vstdate between '2006-04-01' and '2006-06-30'
and d.vn = o.vn
and d.dtcode in ('405','410','416','421')
group by d.vn
... :D ...
ขอบคุณครับ แล้อยากได้ผล sum ที่เป็นตัวเลขเลย ทำไงครับ ไม่อยากได้เป็น record ครับ เพราะตัวนี้ได้เป็น record ครับ
-
select sum(d.dtvalue)
from dtdetail2 d,ovst o
where o.vstdate between '2006-04-01' and '2006-06-30'
and d.vn = o.vn
and d.dtcode in ('405','410','416','421')
ขออนุญาตตอบแทนนะครับ อ.ขวด ;D
-
ขอบคุณครับ ได้แล้วครับ