BMS-HOSxP Community
HOSxP => แจ้งปัญหา / ขอความช่วยเหลือ => ข้อความที่เริ่มโดย: onlinelp ที่ กุมภาพันธ์ 28, 2008, 15:41:30 PM
-
ช่วยผมด้วยครับทำมัยยังมีผู้ป่วยซ้ำกันอยู่ผมผิดตรงไหนครับ... ???
select distinct pt.hn,ov.hospmain,ov.vstdate,pt.cid,pt.pname,pt.fname,pt.lname,pt.birthday,ov.age_y,
pt.sex,os.bw,os.height,concat(os.bpd,"/",os.bps)as mmhg,pt.addrpart,pt.moopart,pt.tmbpart,pt.amppart,pt.chwpart,
concat(pt.addrpart,"Á.",pt.moopart,' '," µ.",t3.name,' ',"Í.",t2.name,' '," ¨.",t1.name)
as fulladdressname,pt.nationality,ov.pdx,i.name
from vn_stat ov
left outer join opdscreen os on os.hn=ov.hn
left outer join patient pt on pt.hn=ov.hn
left outer join ovst ovst on ovst.hn =ov.hn
left outer join icd101 i on i.code = ov.main_pdx
left outer join pttype ptt on ptt.pttype = ov.pttype
left outer join thaiaddress t1 on t1.chwpart=pt.chwpart and
t1.amppart="00" and t1.tmbpart="00"
left outer join thaiaddress t2 on t2.chwpart=pt.chwpart and
t2.amppart=pt.amppart and t2.tmbpart="00"
left outer join thaiaddress t3 on t3.chwpart=pt.chwpart and
t3.amppart=pt.amppart and t3.tmbpart=pt.tmbpart
where ov.vn>="500101000000" and ov.vn<="5033199999"
and ov.age_y>= 0
and ov.age_y<= 200
and ( (ov.pdx >= "I10" and ov.pdx <= "I159")
or (ov.pdx >= "e10" and ov.pdx <= "e149")
or (ov.pdx >= "j40" and ov.pdx <= "j479")
or (ov.pdx >= "i60" and ov.pdx <= "i699")
or (ov.pdx >= "i20" and ov.pdx <= "I259"))
limit 10
ขอบคุณล่วงหน้าครับ :o
-
แก้ไข 2 บรรทัดนี้ครับ
left outer join opdscreen os on os.vn=ov.vn
left outer join ovst ovst on ovst.vn =ov.vn
-
ขอบคุณมากครับ... ;D :D :D
-
น่าจะได้แก้ตรงนี้ด้วยครับ
where ov.vn>="500101000000" and ov.vn<="5033199999"
รู้สึกว่า vn ยังไม่ครบ 12 หลัก แต่ผมว่าควรดึงจาก vstdate ดีกว่านะครับ
-
ยังซ้ำอยู่เลยอ่ะคับ ??? ??? ???
-
ช่วยส่ง code ที่แก้ไขแล้วมาให้ดูใหม่ด้วยครับ
และสอบถามเพิ่มเติมครับ ว่าต้องการหาข้อมูลอะไรจาก sql นี้ครับ
??? ??? ???
-
ลองแบบนี้ดูครับ
select distinct(pt.hn),ov.hospmain,ov.vstdate,pt.cid,pt.pname,pt.fname,pt.lname,pt.birthday,ov.age_y,
pt.sex,os.bw,os.height,concat(os.bpd,"/",os.bps)as mmhg,pt.addrpart,pt.moopart,pt.tmbpart,pt.amppart,pt.chwpart,
concat(pt.addrpart,"Á.",pt.moopart,' '," µ.",t3.name,' ',"Í.",t2.name,' '," ¨.",t1.name)
as fulladdressname,pt.nationality,ov.pdx,i.name
from vn_stat ov
left outer join opdscreen os on os.hn=ov.hn
left outer join patient pt on pt.hn=ov.hn
left outer join ovst ovst on ovst.hn =ov.hn
left outer join icd101 i on i.code = ov.main_pdx
left outer join pttype ptt on ptt.pttype = ov.pttype
left outer join thaiaddress t1 on t1.chwpart=pt.chwpart and
t1.amppart="00" and t1.tmbpart="00"
left outer join thaiaddress t2 on t2.chwpart=pt.chwpart and
t2.amppart=pt.amppart and t2.tmbpart="00"
left outer join thaiaddress t3 on t3.chwpart=pt.chwpart and
t3.amppart=pt.amppart and t3.tmbpart=pt.tmbpart
where ov.vn>="500101000000" and ov.vn<="5033199999"
and ov.age_y>= 0
and ov.age_y<= 200
and ( (ov.pdx between "I10" and "I159")
or (ov.pdx between "e10" and "e149")
or (ov.pdx between "j40" and "j479")
or (ov.pdx between "i60" and "i699")
or (ov.pdx between "i20" and "I259"))
limit 20
-
วิธีที่1 ตัด column ที่จะทำให้ record แตกต่างกัน เช่น vstdate ,bps,bpd เพราะถึงแม้จะเป็น hn เดียวกัน
แต่มี column อื่น ต่างกัน ก็จะถือว่าเป็น record ที่แตกต่างกัน
วิธีที่2 เปลี่ยนจาก left outer join เป็น inner join
-
ลองแบบนี้ดูครับ
select distinct pt.hn,ov.hospmain,ov.vstdate,pt.cid,pt.pname,pt.fname,pt.lname,pt.birthday,ov.age_y,
pt.sex,os.bw,os.height,concat(os.bpd,"/",os.bps)as mmhg,pt.addrpart,pt.moopart,pt.tmbpart,pt.amppart,pt.chwpart,
concat(pt.addrpart,"Á.",pt.moopart,' '," µ.",t3.name,' ',"Í.",t2.name,' '," ¨.",t1.name)
as fulladdressname,pt.nationality,ov.pdx,i.name
from vn_stat ov
left outer join opdscreen os on os.vn=ov.vn
left outer join patient pt on pt.hn=ov.hn
left outer join ovst ovst on ovst.vn =ov.vn
left outer join icd101 i on i.code = ov.main_pdx
left outer join pttype ptt on ptt.pttype = ov.pttype
left outer join thaiaddress t1 on t1.chwpart=pt.chwpart and
t1.amppart="00" and t1.tmbpart="00"
left outer join thaiaddress t2 on t2.chwpart=pt.chwpart and
t2.amppart=pt.amppart and t2.tmbpart="00"
left outer join thaiaddress t3 on t3.chwpart=pt.chwpart and
t3.amppart=pt.amppart and t3.tmbpart=pt.tmbpart
where ov.vn>="500101000000" and ov.vn<="5033199999"
and ov.age_y>= 0
and ov.age_y<= 200
and ( (ov.pdx >= "I10" and ov.pdx <= "I159")
or (ov.pdx >= "e10" and ov.pdx <= "e149")
or (ov.pdx >= "j40" and ov.pdx <= "j479")
or (ov.pdx >= "i60" and ov.pdx <= "i699")
or (ov.pdx >= "i20" and ov.pdx <= "I259"))
group by ov.hn
limit 10
แต่ว่ายังไม่เข้าใจว่าต้องการหาข้อมูลอะไรจาก sql นี้ครับ วานบอก
:-\ :-\ :-\
-
SrWoOd <<<<ขอบคุณครับพี่
คือรายงานนี้ผมต้องการจำนวนผู้ป่วยที่เป็นโรคเรื้อรัง 5 โรคดังนี้
1. เบาหวาน
2. ความดันดลหิตสูง
3. หัวใจขาดเลือด
4. หลอดเลือดสมอง
5. ปอดอุดกั้น
โดยนับจำนวนในปีนั้นๆมีกี่ราย...?
ขอบคุณครับผมจะลองนำไปลองครับ.... :o :o
-
ขอบคุณพี่ๆทุกท่านเลยครับที่ให้คำแนะนำทำได้แล้วครับ
;D ;D ;D