BMS-HOSxP Community
HOSxP => Report Exchange => ข้อความที่เริ่มโดย: chaiyahos ที่ ธันวาคม 04, 2012, 16:29:52 PM
-
ขอคำสั่ง sql ในการนับจำนวน visit ที่มานวด+อบสมุนไพร+ประคบสมุนไพร(มีครบทั้ง 3 รายการใน 1 visit) ครับ จะเอาไปใส่ใน variable
หรือคำสั่งที่ใกล้เคียงก็ได้ เช่น นับจำนวน visit ที่มีการสั่งใช้ยาทั้ง ยา A,B,C ใน 1 visit (จะลองเอาไปประยุกต์ดูครับ)
-
ขอพิมพ์โดยไม่ได้ลองกับHOSxp นะครับ
select o.vn from opitemrece o
where o.vn in (select op.vn from opitemrece op where op.icode="รหัสยาที่ 1"
and op.vstdate between "2012-12-01" and "2012-12-03" )
and o.icode="รหัสยาตัวที่ 2" and o.vstdate between "2012-12-01" and "2012-12-03"
limit 10
ผมใช้ ตารางเดียวกันโดยกำหนดชื่อย่อตารางไว้คนละแบบนะครับ จะได้เข้าใจง่าย
ซึ่งความจริงอาจจะไม่ต้องใส่เลยก็ได้ครับ
-
ขอบคุณครับ จะลองปรับใช้ดูนะครับ ;D
-
select o.vn from opitemrece o
where op.icode in ("รหัสยา A" ,"รหัสยา B" ,"รหัสยา C" )
and o.vstdate between "2012-12-01" and "2012-12-03"
group by o.vn
-
select o.vn from opitemrece o
where op.icode in ("รหัสยา A" ,"รหัสยา B" ,"รหัสยา C" )
and o.vstdate between "2012-12-01" and "2012-12-03"
group by o.vn
คำสั่งนี้หากมีการสั่งยาแค่ตัวเดียวก็จะขึ้นแล้วไม่ใช่หรือครับ แต่ที่เขาต้องการคือต้องมียาทั้ง 2 ตัวอยู่ด้วย
แต่พอมองเห็นคำสั่งนี้ก็นึกขึ้นได้อีกแบบครับ
select o.vn from opitemrece o
where o.icode in ("รหัสยา 1","รหัสยา2","รหัสยา3")
and o.vstdate between "2012-12-01" and "2012-12-03"
group by o.vn
having count(o.vn>2)
ใช้ในกรณีที่สั่งยาทั้ง 3 ตัว ครับ
-
select o.vn from opitemrece o
where o.icode in ("รหัสยา 1","รหัสยา2","รหัสยา3")
and o.vstdate between "2012-12-01" and "2012-12-03"
group by o.vn
having count(o.vn>2)
ระวัง คำสั่งนี้ตรงที่ หากมีการสั่งยาเดิมซ้ำ 2 - 3 ครัง ก็อาจทำให้ได้ vn ที่สั่งยาจริง ๆ แค่ 1 - 2 ตัวได้ครับ
-
select o.vn from opitemrece o
where op.icode in ("รหัสยา A" ,"รหัสยา B" ,"รหัสยา C" )
and o.vstdate between "2012-12-01" and "2012-12-03"
group by o.vn
คำสั่งนี้หากมีการสั่งยาแค่ตัวเดียวก็จะขึ้นแล้วไม่ใช่หรือครับ แต่ที่เขาต้องการคือต้องมียาทั้ง 2 ตัวอยู่ด้วย
แต่พอมองเห็นคำสั่งนี้ก็นึกขึ้นได้อีกแบบครับ
select o.vn from opitemrece o
where o.icode in ("รหัสยา 1","รหัสยา2","รหัสยา3")
and o.vstdate between "2012-12-01" and "2012-12-03"
group by o.vn
having count(o.vn>2)
ใช้ในกรณีที่สั่งยาทั้ง 3 ตัว ครับ
ขอแก้ไขเพิ่มเติมครับ
ตรง having count(o.vn>2) ให้เอา >2 ออกนอกวงเล็บครับ
แบบนี้ครับ having count(o.vn)>2
-
select o.vn from opitemrece o
where op.icode in ("รหัสยา A" ,"รหัสยา B" ,"รหัสยา C" )
and o.vstdate between "2012-12-01" and "2012-12-03"
group by o.vn
คำสั่งนี้หากมีการสั่งยาแค่ตัวเดียวก็จะขึ้นแล้วไม่ใช่หรือครับ แต่ที่เขาต้องการคือต้องมียาทั้ง 2 ตัวอยู่ด้วย
แต่พอมองเห็นคำสั่งนี้ก็นึกขึ้นได้อีกแบบครับ
select o.vn from opitemrece o
where o.icode in ("รหัสยา 1","รหัสยา2","รหัสยา3")
and o.vstdate between "2012-12-01" and "2012-12-03"
group by o.vn
having count(o.vn>2)
ใช้ในกรณีที่สั่งยาทั้ง 3 ตัว ครับ
ขอแก้ไขเพิ่มเติมครับ
ตรง having count(o.vn>2) ให้เอา >2 ออกนอกวงเล็บครับ
แบบนี้ครับ having count(o.vn)>2
ขอบคุณครับ บังเอิญไม่ได้ทดสอบ จึงพิมพ์ผิดไปครับ
-
ขอบคุณทุกท่านครับที่ให้คำตอบที่เป็นประโยชน์ แต่ผมลองทำแล้ว โจทย์มันซับซ้อนกว่าที่คิด เช่น ต้องการทราบจำนวนครั้งที่มีการจ่ายยาสมุนไพรอย่างเดียว (ไม่รวมยา+นวด+ประคบ) ,ยา+นวด(ไม่รวมประคบ+ยา+นวด+อบสมุนไพร) ฯลฯ ??? ??? ??? สุดท้ายใช้ access เลยครับ
-
ขอบคุณทุกท่านครับที่ให้คำตอบที่เป็นประโยชน์ แต่ผมลองทำแล้ว โจทย์มันซับซ้อนกว่าที่คิด เช่น ต้องการทราบจำนวนครั้งที่มีการจ่ายยาสมุนไพรอย่างเดียว (ไม่รวมยา+นวด+ประคบ) ,ยา+นวด(ไม่รวมประคบ+ยา+นวด+อบสมุนไพร) ฯลฯ ??? ??? ??? สุดท้ายใช้ access เลยครับ
ความตั้งใจ และการแสวงหา ย่อมนำไปสู่หนทางออก
ต้องการทราบจำนวนครั้งที่มีการจ่ายยาสมุนไพรอย่างเดียว(ไม่รวมอบ+นวด+ประคบสมุนไพร)
o.icode in ("รหัสยา") and o.icode not in ("รหัสนวด") and o.icode not in ("รหัสประคบ") and o.icode not in ("รหัสอบ")
-
คุณมนตรี เป๊ะ!!เลย เดี๋ยวจะลองเขียน report ใหม่ ขอบคุณครับ
ตอนนี้ใช้ access ประมวลผลนานมากกกกกก.....