ผู้เขียน หัวข้อ: คำสั่ง sum แต่ต้อง group by column อื่น ต้องทำไงครับ  (อ่าน 9166 ครั้ง)

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

ออฟไลน์ natch2005

  • Sr. Member
  • ****
  • กระทู้: 301
  • Respect: 0
    • ดูรายละเอียด
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 อย่างไรครับ

ขอบคุณครับ
ศูนย์คอมพิวเตอร์ โรงพยาบาลสุไหงโก-ลก จังหวัด นราธิวาส ขึ้นระบบโดยทีมงาน HOSxP จำนวน 2 ครั้ง วันที่ 20 สิงหาคม 2550 และ วันที่ 1 พค 2552 ระบบดีขึ้น และได้จัดทำระบบ ดาต้าเซนเตอร์กับทางบริษัท และให้ทางบริษัทลงโปรแกรมเกี่ยวกับการเบิกจ่ายตรงให้กับการเงิน

ออฟไลน์ ไม่เสียสละ ชัยชนะไม่เกิด

  • Hero Member
  • *****
  • กระทู้: 1,267
  • Project Maneger
  • Respect: +2
    • ดูรายละเอียด
Re: คำสั่ง sum แต่ต้อง group by column อื่น ต้องทำไงครับ
« ตอบกลับ #1 เมื่อ: สิงหาคม 18, 2010, 10:03:56 AM »
0
ก็สามารภใส่ group by dtdetail2.vn  ไว้ท้ายสุดได้เลยครับ
ทำไม่ได้ หรือไม่ได้ทำ
 Project Maneger
Bangkok Medical Software Co., Ltd.
2, 2nd Floor, Soi Suksawat 33,
Suksawat Road, Radburana 10140
Thailand

ออฟไลน์ natch2005

  • Sr. Member
  • ****
  • กระทู้: 301
  • Respect: 0
    • ดูรายละเอียด
Re: คำสั่ง sum แต่ต้อง group by column อื่น ต้องทำไงครับ
« ตอบกลับ #2 เมื่อ: สิงหาคม 20, 2010, 10:38:39 AM »
0
ขอบคุณครับ แต่ยังไม่ถูกครับ คือ อยากได้เป็นตัวเลข ผลรวมแล้วนะครับ ถ้าทำแบบนั้นมันจะได้เป็น reccord ครับ เช่น ได้เป็นผลรวม 320 อะไรประมาณนี้นะครับ
ศูนย์คอมพิวเตอร์ โรงพยาบาลสุไหงโก-ลก จังหวัด นราธิวาส ขึ้นระบบโดยทีมงาน HOSxP จำนวน 2 ครั้ง วันที่ 20 สิงหาคม 2550 และ วันที่ 1 พค 2552 ระบบดีขึ้น และได้จัดทำระบบ ดาต้าเซนเตอร์กับทางบริษัท และให้ทางบริษัทลงโปรแกรมเกี่ยวกับการเบิกจ่ายตรงให้กับการเงิน

ออฟไลน์ ไม่เสียสละ ชัยชนะไม่เกิด

  • Hero Member
  • *****
  • กระทู้: 1,267
  • Project Maneger
  • Respect: +2
    • ดูรายละเอียด
Re: คำสั่ง sum แต่ต้อง group by column อื่น ต้องทำไงครับ
« ตอบกลับ #3 เมื่อ: สิงหาคม 20, 2010, 10:44:47 AM »
0
ขอคำอธิบายมากกว่านี้อีกนิดครับคือผมงงกับคำอธิบายนี้ครับ
    รบกวนบอกความต้องการอีกสักหน่อยจะได้ช่วยได้ครับ
ทำไม่ได้ หรือไม่ได้ทำ
 Project Maneger
Bangkok Medical Software Co., Ltd.
2, 2nd Floor, Soi Suksawat 33,
Suksawat Road, Radburana 10140
Thailand

ออฟไลน์ Khuad

  • Hero Member
  • *****
  • กระทู้: 3,778
  • .. นางฟ้า ตัวไม่น้อยแล้ว ..
  • Respect: +10
    • ดูรายละเอียด
Re: คำสั่ง sum แต่ต้อง group by column อื่น ต้องทำไงครับ
« ตอบกลับ #4 เมื่อ: สิงหาคม 20, 2010, 13:24:51 PM »
0
... ถ้าต้องการได้ผลรวมของจำนวนใน 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 ...
โรงพยาบาลวังน้อย   พระนครศรีอยุธยา ( รพช.30 เตียง )
Server : ProLiant DL120G6  Xeon X3450  RDIMM 12 Gb  2x256GB SSD Raid 1
OS : CentOS 6.3  DB : Percona 5.5.21

Slave : ProLiant ML110G6  Xeon X3430  UDIMM 8 Gb  2x300GB SAS Raid 1
OS : CentOS 6.3  DB : Percona 5.5.32

HOSxP version  3.57.xx.xx    เริ่มระบบ  เมษายน 2549

ออฟไลน์ natch2005

  • Sr. Member
  • ****
  • กระทู้: 301
  • Respect: 0
    • ดูรายละเอียด
Re: คำสั่ง sum แต่ต้อง group by column อื่น ต้องทำไงครับ
« ตอบกลับ #5 เมื่อ: สิงหาคม 23, 2010, 10:23:01 AM »
0
... ถ้าต้องการได้ผลรวมของจำนวนใน 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 ครับ
ศูนย์คอมพิวเตอร์ โรงพยาบาลสุไหงโก-ลก จังหวัด นราธิวาส ขึ้นระบบโดยทีมงาน HOSxP จำนวน 2 ครั้ง วันที่ 20 สิงหาคม 2550 และ วันที่ 1 พค 2552 ระบบดีขึ้น และได้จัดทำระบบ ดาต้าเซนเตอร์กับทางบริษัท และให้ทางบริษัทลงโปรแกรมเกี่ยวกับการเบิกจ่ายตรงให้กับการเงิน

ออฟไลน์ yokyai

  • Hero Member
  • *****
  • กระทู้: 1,462
  • Respect: +9
    • ดูรายละเอียด
Re: คำสั่ง sum แต่ต้อง group by column อื่น ต้องทำไงครับ
« ตอบกลับ #6 เมื่อ: สิงหาคม 23, 2010, 10:26:35 AM »
0
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
Sakaowrat Choocherd(Administrator) Information Technologist
Bangyai Hospital(30 beds)
HOSxP = 16_May_2008
Master and Slave : DELL-R730 Server Intel Xeon 8Core(2Units)
,Ram64 GB,HDD600(10k)x4,Raid5,CentOS 7.0 64 bit
,MySQL 10.1.10-MariaDB
(3 March 2016) With BMSxTraBackupGUI

ออฟไลน์ natch2005

  • Sr. Member
  • ****
  • กระทู้: 301
  • Respect: 0
    • ดูรายละเอียด
Re: คำสั่ง sum แต่ต้อง group by column อื่น ต้องทำไงครับ
« ตอบกลับ #7 เมื่อ: สิงหาคม 23, 2010, 14:34:25 PM »
0
ขอบคุณครับ ได้แล้วครับ
ศูนย์คอมพิวเตอร์ โรงพยาบาลสุไหงโก-ลก จังหวัด นราธิวาส ขึ้นระบบโดยทีมงาน HOSxP จำนวน 2 ครั้ง วันที่ 20 สิงหาคม 2550 และ วันที่ 1 พค 2552 ระบบดีขึ้น และได้จัดทำระบบ ดาต้าเซนเตอร์กับทางบริษัท และให้ทางบริษัทลงโปรแกรมเกี่ยวกับการเบิกจ่ายตรงให้กับการเงิน