BMS-HOSxP Community

HOSxP => การเขียน SQL Script => ข้อความที่เริ่มโดย: natch2005 ที่ สิงหาคม 18, 2010, 09:56:02 AM

หัวข้อ: คำสั่ง sum แต่ต้อง group by column อื่น ต้องทำไงครับ
เริ่มหัวข้อโดย: 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 อย่างไรครับ

ขอบคุณครับ
หัวข้อ: Re: คำสั่ง sum แต่ต้อง group by column อื่น ต้องทำไงครับ
เริ่มหัวข้อโดย: ไม่เสียสละ ชัยชนะไม่เกิด ที่ สิงหาคม 18, 2010, 10:03:56 AM
ก็สามารภใส่ group by dtdetail2.vn  ไว้ท้ายสุดได้เลยครับ
หัวข้อ: Re: คำสั่ง sum แต่ต้อง group by column อื่น ต้องทำไงครับ
เริ่มหัวข้อโดย: natch2005 ที่ สิงหาคม 20, 2010, 10:38:39 AM
ขอบคุณครับ แต่ยังไม่ถูกครับ คือ อยากได้เป็นตัวเลข ผลรวมแล้วนะครับ ถ้าทำแบบนั้นมันจะได้เป็น reccord ครับ เช่น ได้เป็นผลรวม 320 อะไรประมาณนี้นะครับ
หัวข้อ: Re: คำสั่ง sum แต่ต้อง group by column อื่น ต้องทำไงครับ
เริ่มหัวข้อโดย: ไม่เสียสละ ชัยชนะไม่เกิด ที่ สิงหาคม 20, 2010, 10:44:47 AM
ขอคำอธิบายมากกว่านี้อีกนิดครับคือผมงงกับคำอธิบายนี้ครับ
    รบกวนบอกความต้องการอีกสักหน่อยจะได้ช่วยได้ครับ
หัวข้อ: Re: คำสั่ง sum แต่ต้อง group by column อื่น ต้องทำไงครับ
เริ่มหัวข้อโดย: Khuad ที่ สิงหาคม 20, 2010, 13:24:51 PM
... ถ้าต้องการได้ผลรวมของจำนวนใน 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 ...
หัวข้อ: Re: คำสั่ง sum แต่ต้อง group by column อื่น ต้องทำไงครับ
เริ่มหัวข้อโดย: natch2005 ที่ สิงหาคม 23, 2010, 10:23:01 AM
... ถ้าต้องการได้ผลรวมของจำนวนใน 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 ครับ
หัวข้อ: Re: คำสั่ง sum แต่ต้อง group by column อื่น ต้องทำไงครับ
เริ่มหัวข้อโดย: yokyai ที่ สิงหาคม 23, 2010, 10:26:35 AM
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
หัวข้อ: Re: คำสั่ง sum แต่ต้อง group by column อื่น ต้องทำไงครับ
เริ่มหัวข้อโดย: natch2005 ที่ สิงหาคม 23, 2010, 14:34:25 PM
ขอบคุณครับ ได้แล้วครับ