25 กรกฎาคม 2565

คำสั่ง Update patient ของ รพ.

 UPDATE patient

SET type_area = "4" 

WHERE chwpart = "31" AND amppart = "11" AND tmbpart = "02" 

AND moopart NOT IN("02","03","04","05","06","08","10","11","13","14","15","18","21","23","24") AND type_area IS null


UPDATE patient

SET type_area = "4" 

WHERE chwpart <> "31" AND type_area IS null


UPDATE patient

SET type_area = "4" 

WHERE type_area IS null

04 ธันวาคม 2561

ช่วยจำ : การติดตั้งโปรแกรมโดยใช้คำสั่ง rpm มีพารามิเตอร์ต่างๆ ที่สำคัญดังนี้

#rpm -ivh package_name.rpm //ทำการติดตั้งโปรแกรม
#rpm -Uvh package_name.rpm //อัพเกรดโปรแกรม
#rpm -ev package_name.rpm //ถอนการติดตั้งโปรแกรมที่ติดตั้งไว้แล้ว
#rpm -qa //แสดงรายชื่อโปรแกรมที่ติดตั้งไปแล้ว
#rpm -ql package_name.rpm //แสดงรายละเอียดของโปรแกรมที่ติดตั้งไปแล้ว

สำหรับ web ที่ใช้ download คือ http://rpmfind.net

15 สิงหาคม 2561

hosxp เมื่อต้องการนำข้อมูลเงื่อนไข parameter แสดงในรายงาน

 

เมื่อต้องการข้อมูล parameter ของรายงานมีแสดงผลให้ใช้ Fuction
GetUserParameter(i)

ยกตัวอย่าง

Value :=   'ระหว่างวันที่ '+FormatThaiDate('d mmmm yyyy',StrToDate(GetUserParameter(0)))+' ถึงวันที่ '+FormatThaiDate('d mmmm yyyy',StrToDate(GetUserParameter(1)));

เมื่อต้องการนำข้อมูลหลายๆ แถวในคอลัมน์ มาเรียงกันเป็นแถวเดียว

ใช้คำสั่ง Group_concat()
แต่เมื่อใน hosxp ให้เพิ่ม คำสั่ง group_concat(ชื่อคอลัมน์) as ชื่่อตัวแปร ด้วย

04 กรกฎาคม 2560

คำสั่ง mysql เกี่ยวกับ ระบบงานห้องคลอด

1.เลขที่ หนังสือรับรองการเกิด
document_born_id
select * from serial where name like "%born%"
select document_born_id from ipt_labour_infant where ipt_labour_id = 274


2. mysql ดึงข้อมูล หนังสือรับรองการเกิด

select ili.sex, ili.birth_date, ili.birth_time, concat(p.pname,p.fname," ",p.lname)  as mother_name,a.hn as mother_hn, a.age_y as mother_age, p.cid as mother_cid,
il.g-1+ip.child_count as child_no, il.l+1 as living_child, il.a, ili.hn, ili.labour_doctor, ip.ga,ili.birth_weight, ili.document_born_id,
concat(pt.pname,pt.fname) as infant_name, pt.lname as infant_lname, pt.cid as infant_cid, na.name as infant_citizenship,
if(pt.sex is null,ili.sex,pt.sex) as infant_sex, if(pt.fathername is null,concat(p.spsname," ",p.spslname),concat("นาย",pt.fathername," ",pt.fatherlname)) as father_name, pt.father_cid,
ili.ipt_labour_id, ip.deliver_type, ip.deliver_abnormal_type, ldat.labour_deliver_abnormal_name, ip.child_count

from ipt_labour_infant ili
join ipt_labour il on il.ipt_labour_id = ili.ipt_labour_id
join ipt_pregnancy ip on ip.an = il.an
join ipt i on i.an = il.an
join an_stat a on a.an=i.an
join patient p on p.hn = i.hn
left join patient pt on pt.hn=ili.hn
left join nationality na on na.nationality=pt.citizenship
left join labour_deliver_abnormal_type ldat on ldat.labour_deliver_abnormal_type=ip.deliver_abnormal_type
where ili.ipt_labour_infant_id = "221"
อ้างอิง : http://jda-memo.blogspot.com/2017/02/mysql.html?view=magazine

28 มิถุนายน 2560

คำสั่ง MySQL ที่ควรรู้ในการสร้างรายงานใน HOSXP



คำสั่ง MySQL

คำสั่งตรวจสอบ
show master status;   ตรวจสอบการทำงานของ master
show slave status;      ตรวจสอบการทำงานของ slave
show full processlist;            : แสดงผู้ที่เข้ามาทำงาน mysql 
show create table  ชื่อตาราง   : แสดงคำสั่งใช้สร้างตารางนั้น
describe ชื่อtable                  : แสดงรายละเอียดของตาราง 


1.การสร้างฐานข้อมูล
  CREATE DATABASE `test` DEFAULT CHARACTER SET tis620 COLLATE tis620_thai_ci;
  อธิบาย สร้างฐานข้อมูล test โดยตั้งค่า(การเรียงลำดับ) หลักเป็น is620 COLLATE tis620_thai_ci;

1.1 การตั้งค่าสิทธิการใช้งานให้ตาราง
  grant all on test.* to test@'%' identified by '12345'     
    อธิบาย ให้สิทธิทุกอย่าง ในการแก้ไขฐานข้อมูล test  แก่ test@'%'  โดยใช้รหัสผ่าน 12345  ในการเข้าใช้
    
2.การสร้างตารางในฐานข้อมูล
  CREATE TABLE `test` 
   (`id` int(11) NOT NULL default '0',`name` varchar(250) default NULL,PRIMARY KEY (`id`),UNIQUE KEY `id`(`id`))
  
  อธิบาย สร้างตารางชื่อ refer_cause โดยมี field `id` เก็บข้อมูลชนิด integer ขนาด 11 ไม่มีค่าว่าง และมีค่า default=0 
    field 'name' เก็บข้อมูลชนิด varchar  ขนาด 250 default = NULL  โดยมี id เป็น PRIMARY KEY และ   UNIQUE KEY
    
3. การปรับเปลี่ยนตาราง alter
  เพิ่ม alter table test add confirm char(10)      
     อธิบาย แทรก(คอลัม)filed ชื่อ  confirm ชนิดข้อมูล char ขนาด 10 ที่ตาราง test
     เปลี่ยนชื่อ ALTER TABLE `test` CHANGE `confirm` `rename` INT( 15 ) NULL DEFAULT NULL 
     อธิบาย เปลี่ยน ชื่อคอลัม  confirm ที่ตาราง test เป็น rename  และชนิดข้อมูล  INT ขนาด 15 ที่ตาราง test    
     
     
4. การลบข้อมูลในตาราง (แถว) delete
  delete from pttype_group2    where pname=1    
    อธิบาย  ลบข้อมูลในตาราง  pttype_group2  เมื่อ pname มีค่า =1
  delete  from hipdata  where cid  in (select cid from patient where pttype = '20')
 อธิบาย  ลบข้อมูลในตาราง  hipdata  เมื่อ cid มีค่า = cid ที่  patient และ patient.pttype = '20'
     
5. การลบตาราง(โยนทิ้ง) DROP
     DROP TABLE `pttype_group2`
 
     อธิบาย ลบตาราง(โยนทิ้ง) pttype_group2  จากฐานข้อมูลปัจจุบัน
     
6.  การเลือกข้อมูล(นำข้อมูลมาแสดง)  select
    6.1   เลือกทั้งหมด  select * from test
    6.2   เลือกบางข้อมูล  select id,name from test 
    6.3   เลือกโดยเงื่อนไข   where  // between,and,or,like,in,not in,distinct (ไม่ซ้ำ) , <, > ,=>,<=,=,<> (ไม่เท่ากับ) !=,
            %(อะไรก็ได้ยาวไม่จำกัด),_ (อะไรก็ได้แต่ยาวไม่เกินจำนวน _)
        6.3.1  select * from vn_stat where pcode is null or pcode=''  and pttype in ("75","80") and pdx like "K02%" 
        and vstdate between "2006-03-01" and "2006-06-30"
                 อธิบาย เลือกข้อมูลทุกตัว* จากตาราง vn_stat เมื่อ pcode เป็นค่าว่าง  และ pttype มีค่าเป็น 75,80 และ pdx ขึ้นต้นด้วย k02
                 และ vstdate อยู่ในช่วง "2006-03-01" ถึง "2006-06-30"
                 
        6.3.2  select distinct hn,pttype from opitemrece
                where  pttype  in (select pttype from pttype   where pcode in (select pcode from pcode))
         อธิบาย แสดง hn ที่ไม่ซ้ำกัน ,pttype  จาก opitemrece เมื่อ pttype  มีค่าอยู่ใน ตาราง pttype.pttype และ
                 pttype.pcode มีค่าอยู่ใน pcode.pcode 
                 
        6.3.3  select v.pdx,i.name,count(v.pdx) as pdx_count from vn_stat v
    left outer join icd101 i on i.code=v.pdx 
   where v.vstdate between '2006-08-01' and '2006-08-31' group by v.pdx,i.name order by pdx_count desc limit 10
  อธิบาย แสดง pdx ,นับจำนวน pdx แสดงที่  pdx_count (การ count จำเป้นต้องใช้ as ร่วมด้วยไม่งั้นอาจมี error) ,ชื่อ pdx ( เชื่อม
  v.pdxกับicd101.code เพื่อดึงชื่อ) จาก vn_stat และอยู่ในช่วง vstdate โดยให้จัดกลุ่มตาม pdx (group by ใช่ร่วมกับคำสั่ง count,
  min ,max)  และเรียงลำดับตาม pdx_count  จากมากไปน้อย ( DESC มากไปน้อย ASC น้อยไปมาก)  แสดงที่ 10 รายการ

        
    6.4  การ join  เป็นการนำตารางหลาย ๆ ตารางมาคิวรีพร้อมกัน เพื่อหาข้อมูลที่ต้องการ
    Inner Join เป็นการนำตาราง 2 ตารางมา join กัน ตามเงื่อนไขที่กำหนด (เป็นการ join ทั้งสองฝั่งต้องมี field ที่นำมา join กันเหมือนกัน)
    >> Equi JOIN จะมีการแสดงข้อมูลซ้ำกันในคอลัมน์ที่นำมาเปรียบเทียบกัน 
    >> Natural JOIN จะไม่นำข้อมูลคอมลัมน์ที่เปรียบเทียบมาแสดง
    Cross Join (Unrestricted JOIN) เป็นการ JOIN ที่แสดงถึงความเป็นไปได้ของผลลัพธ์ที่สามารถเกิดขึ้นได้ (Cartesian Product)
    Outer Join การ JOIN ที่อยู่นอกเหนือเงื่อนไขที่กำหนด ประกอบไปด้วย
    >> LEFT OUTER JOIN (* =) นำเอาฝั่งซ้ายมาทุกrecord ส่วนทางขวาจะนำเอา record ที่เหมือนทางซ้ายมาเท่านั้น
    >> RIGHT OUTER JOIN (= *) นำเอาฝั่งขวามาทุกrecord ส่วนทางซ้ายจะนำเอา record ที่เหมือนทางขวามาเท่านั้น
    Outer Join เป็นการ JOIN ตารางเดียวกัน แต่ตั้งชื่อ alias ต่างกัน
 Full Join : เป็นการ join กันที่จะนำเอาฝั่งซ้ายและฝั่งขวามาทุกrecord โดยรายการไหนที่ไม่ match กันก็จะแสดง null value ออกมาให้ 

EXAMPLE 1  select d.name as doctor_name,o.icode,concat(s.name," ",s.strength," ",s.units) as item_name
    ,sum(o.qty) as   sum_qty from opitemrece o 
                 left outer join doctor d on d.code=o.doctor 
                 left outer join s_drugitems s on s.icode=o.icode and o.icode like "1%" 
                 where o.rxdate between  "2006-09-01" and "2009-09-10" group by d.name,o.icode     
        อธิบาย เลือกข้อมูลหลักจากตาราง opitemrece o (ใช้ o แทน opitemrece) โดย เชื่อม ตาราง doctor d โดย d.code=o.doctor 
                 และ เชื่อม s_drugitems s on s.icode=o.icode o.icode ขึ้นต้นด้วย 
                 แล้วแสดงข้อมูล doctor.name ที่ doctor_name ,opitemrece.icode ,
                 รวมข้อมูล  s_drugitems.name  s_drugitems.strength  s_drugitems.unit ที่ item_name และ ผลรวมของ opitemrece.qty
 EXAMPLE 2 
    SELECT p.hn,p.fname,p.lname,t1.name as chw_name, t2.name as amp_name,t3.name as tmb_name
     FROM patient p
     LEFT OUTER JOIN thaiaddress t1 on t1.chwpart=p.chwpart  and t1.codetype='1'
     LEFT OUTER JOIN thaiaddress t2 on t2.chwpart=p.chwpart  and t2.amppart=p.amppart and t2.codetype='2'
     LEFT OUTER JOIN thaiaddress t3 on t3.chwpart=p.chwpart  and t3.amppart=p.amppart 
     and t3.tmbpart= p.tmbpart and t3.codetype='3'
     WHERE p.fname LIKE 'สม%'
 EXAMPLE 3
                 select g.income_group,g.name,sum(o.rcptamt) as rcptamt
                 from income_group g,income i,incoth o,vn_stat v
                 where v.vstdate between "2006-09-01" and "2006-09-31"
                 and v.vn=o.vn and i.income=o.income and g.income_group=i.income_group 
                 group by g.income_group,g.name

 
 7. การแก้ไข/เปลี่ยนแปลงข้อมุลในตาราง update data set
       UPDATE nondrugitems SET istatus = 'Y'  WHERE (istatus = '' OR istatus IS NULL)
    อธิบาย แก้ไขค่า istatus เป็น Y เมื่อ istatus มีค่าว่าง
       UPDATE nondrugitems SET price = price2 WHERE price2 >0 AND price2 IS NOT NULL
    อธิบาย แก้ไขค่า price ให้มีค่า= price2 เมื่อ  price2 มีค่ามากกว่า 0และไม่ใช่ค่าว่าง

   UPDATE nondrugitems set billnumber=(select billnumber from nondrugi where nondrugi.icode=nondrugitems.icode)
 ดึงค่าจากตารางหนึ่งมาใส่ในตารางหนึ่ง     แก้ไขค่า nondrugitems .billnumber ให้มีค่า= nondrugi.billnumber เมื่อ  nondrugitems.icode =nondrugi.icode
   UPDATE clinicmember SET last_vn = (SELECT max(vn) FROM oapp WHERE oapp.hn=clinicmember.hn)
                                      ให้ดึงค่าที่มากที่สุดมาใช้ 

update patient set informaddr= (select full_name from thaiaddress
left outer  join vn_stat on vn_stat.aid=thaiaddress.addressid
left outer  join patient on patient.hn=vn_stat.hn
where   vn_stat.aid=thaiaddress.addressid)

update patient set informaddr=(select concat(patient.moopart,' ',thaiaddress.full_name) from thaiaddress where
thaiaddress.tmbpart=patient.tmbpart and  thaiaddress.amppart=patient.amppart and thaiaddress.chwpart=patient.chwpart)

การ update ในตารางเดียวกัน

update rx_operator 
inner join rx_operator as rx_operator_2 on rx_operator.vn=rx_operator_2.vn
set rx_operator.check_staff=rx_operator_2.pay_staff
where  rx_operator.check_staff is null

update ovst
inner join ovst as ovst_2 on ovst.vn=ovst_2.vn
set ovst.spclty="15"
where  ovst_2.spclty ='96'


การ update แบบเติมค่าเข้าไป 

update ptcardno p set p.cardno = concat('0-0000-0',mid(p.hn,1,4),'-',mid(p.hn,5,2),'-',right(p.hn,1))
where p.hn in(select hn from patient  where nationality  <>"99"  and citizenship <> '99' and cid like"000000%" or cid like "1111111%" )

     จาก sql ข้างบนเป็นการเลือกดูข้อมูลการส่ง lab ของ ผู้ป่วยนอกและผู้ป่วยใน 
     
     ------------------------------------------------------------------------------------------------------------------------------------
     ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 ------------------------------------------------------------------------------------------------------------------------------------
ตรวจสอบการ gen  การตัด - cid ในเลขบัตรประชาชน




select p.hn,concat(p.pname,' ',p.fname,' ',p.lname)as ptname  ,p.cid,pt.cardno  
,concat(substr(pt.cardno,1,1),substr(pt.cardno,3,4),substr(pt.cardno,8,5), 
 substr(pt.cardno,14,2),substr(pt.cardno,17,1))as pt_cardno ,p.nationality   
from patient  p   left join ptcardno pt on pt.hn=p.hn and pt.cardtype ='01'  
where   p.death ='N'  and p.cid in('','0000000000001','1111111111111')  and p.nationality like('99') 


ตรวจสอบ ptcardno ไม่ถูกต้อง  การตัด - ออก ในระหว่างค่า

select p.hn,concat(p.pname,' ',p.fname,' ',p.lname)as ptname,p.cid,pt.cardno 
 ,concat(substr(pt.cardno,1,1),substr(pt.cardno,3,4),substr(pt.cardno,8,5), 
  substr(pt.cardno,14,2),substr(pt.cardno,17,1))as pt_cardno ,p.nationality  
    from patient  p          left join ptcardno pt on pt.hn=p.hn and pt.cardtype ='01'  where  ( p.cid is null or p.cid ='')

121212121212ตรวจสอบ patient ไม่ถูกต้อง  = การเพิ่มเครื่องหมาย - เข้าไปในระหว่างค่า1212121212

select p.hn,concat(p.pname,' ',p.fname,' ',p.lname)as ptname,p.cid,pt.cardno  ,
concat(substr(p.cid,1,1),'-',substr(p.cid,2,4),'-',substr(p.cid,6,5),'-', 
       substr(p.cid,11,2),'-',substr(p.cid,13,1))as p_cid ,p.nationality  
   from patient  p 
           left join ptcardno pt on pt.hn=p.hn and pt.cardtype ='01'   
             where   ( pt.cardno is null or pt.cardno ='') and p.cid <>'0000000000001' limit 1000 
             
ดึง cid ที่ถูกต้องจาก patient มาใส่ ptcardno  จากรรูปแบบ 00000 มาเป็นแบบ 0-0000-

 99999999999ตรวจสอบ cid patient.cid=ptcardno.cardno   ptcardno.cardno=person.cid  99999999

 select v.hn,v.vstdate,v.cid as vn_stat_cid,p.cid as patient_cid,
concat(substr(pt.cardno,1,1),substr(pt.cardno,3,4),substr(pt.cardno,8,5),
substr(pt.cardno,14,2),substr(pt.cardno,17,1))as pt_cardno,ps.cid as ps_cid from vn_stat v
left outer join patient p on p.hn=v.hn
left outer join ptcardno pt on pt.hn=p.hn and pt.cardtype='01'
left outer join person ps on ps.patient_hn=p.hn
where v.vstdate between'2010-11-01'and'2010-11-30'  and  v.cid<>ps.cid


1. เรียกข้อมูล และ save โครงสร้าง  ptcardno

select p.hn,pt.cardtype ,
concat(substr(p.cid,1,1),'-',substr(p.cid,2,4),'-',substr(p.cid,6,5),'-',substr(p.cid,11,2),'-',substr(p.cid,13,1))as cardno
,pt.expiredate ,pt.hos_guid
from patient  p   left join ptcardno pt on pt.hn=p.hn
and pt.cardtype ='01'  where   p.death ='N'
and p.cid not in('','0000000000001' ,'1111111111111','0000000000000' )  and p.nationality ='99'



+++++++++++++++++++++
select p.hn,pt.cardtype ,
concat(substr(p.cid,1,1),'-',substr(p.cid,2,4),'-',substr(p.cid,6,5),'-',substr(p.cid,11,2),'-',substr(p.cid,13,1))as cardno
,pt.expiredate ,pt.hos_guid , p.nationality
from patient  p   left join ptcardno pt on pt.hn=p.hn
and pt.cardtype ='01'  where   p.death ='N'
and p.cid not in('','0000000000001' ,'1111111111111','0000000000000' ) and p.cid not like "011033%" and p.nationality <>'99'   order by p.hn 
+++++++++++++++++++++++++++++
  



    
 2. ตรวจสอบ   select *  from ptcardno    where  hn in( select hn from patient p where p.cid not in('','0000000000001' ,'1111111111111','0000000000000' )  and p.nationality ='99')
 3. ลบ    delete  from ptcardno where  hn in( select hn from patient p where p.cid not in('','0000000000001' ,'1111111111111','0000000000000' )  and p.nationality ='99')
    
 4. เปิิด    ptcardno ที่ save   ไว้ aphed       
 
 
 ตรวจสอบ person
 select v.hn
from vn_stat  v
left join person p on p.cid=v.cid
 left join patient pa on pa.hn=v.hn
 left outer join thaiaddress t1 on t1.addressid = concat(pa.chwpart,'0000')
 left outer join thaiaddress t2 on t2.addressid = concat(pa.chwpart,pa.amppart,'00')
 left outer join thaiaddress t3 on t3.addressid = concat(pa.chwpart,pa.amppart,pa.tmbpart)
 where v.vstdate between'2011-03-01'and'2011-03-31' and p.cid is null   and pa.nationality='99'

 
 
 
 
 ----------------------------------------------------------------------------------------------------------------------
 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 -----------------------------------------------------------------------------------------------------------------------------
 
 
 
 8. การ Union 

select h.lab_order_number,h.lab_receive_number,h.hn,h.order_date, 
h.order_time,h.receive_time as service13,h.report_time as service14,d.code, 
d.name as doctor_name,concat(pt.pname,pt.fname,'  ',pt.lname) as ptname,h.form_name, 
v.age_y as age_y,h.department 
,v.dx_doctor , d2.name as dx_doctor_name 
from lab_head h 
left outer join patient pt on pt.hn=h.hn 
left outer join doctor d on d.code=h.doctor_code 
left outer join vn_stat v on v.vn=h.vn 
left outer join doctor d2 on d2.code = v.dx_doctor 
where h.order_date between '2006-01-01' and '2006-08-30'  and h.department = 'OPD' 
group by h.lab_receive_number 
union 
select h.lab_order_number,h.lab_receive_number,h.hn,h.order_date, 
h.order_time,h.receive_time as service13,h.report_time as service14,d.code, 
d.name as doctor_name,concat(pt.pname,pt.fname,'  ',pt.lname) as ptname,h.form_name, 
a.age_y as age_y,h.department 
,a.dx_doctor , d2.name as dx_doctor_name 
from lab_head h 
left outer join patient pt on pt.hn=h.hn 
left outer join doctor d on d.code=h.doctor_code 
left outer join an_stat a on a.an=h.vn 
left outer join doctor d2 on d2.code = a.dx_doctor 
where h.order_date between '2006-01-01' and '2006-08-30'  and h.department = 'IPD' 
group by h.lab_receive_number
 
 
 
 
 
 
 

การเขียน  VARAIBLE

1. "' มันคือ ' +" หรือ "+' 
2. +' ... จำเป็นต้องปิดด้วย +' ไหม เพราะบางที่หาตัวปิดไม่เจอ 

1. ชื่อฟังชั่นที่ใช้ก็เป็นการระบุถึงชนิดของผลลัพท์ที่ได้ เช่น double, string, interger 
2. รูปแบบประโยค จะเป็น '.................................' ดังนั้น การเชื่อมประโยค จึงเป็น '......................'+'.........................' 
หรือ '.......................'+  ดังนั้น '.......................' จึงไม่ต้องปิดด้วย + 
3. การใช้ตัวแปร สามารถเขียนอยู่ระหว่างประโยค เช่น '...........'+y+'...............' ดังนั้นการใส่ตัวแปรใน sql script x="y" จึงเป็น '...........x="y"..........' 
เมื่อเราใช้ตัวแปร y จาก pascal script มาใส่ sql script จะเป็น '.........................x=" ' + y + ' "...........' (เว้นวรรคเพื่อให้เห็นความแตกต่าง) 
4. ส่วน DBPipeline['xx'] เป็นการดึงค่า จาก fields xx ซึ่งได้จากการ qeury 

....หากมีการตัดบรรทัดให้เชื่อมด้วย  '+'

แกะยากกว่าหอยครับ แต่อร่อยกว่าแยะ 



  ??????? หากต้องการศึกษา ใน tabl calc ให้เลือก เมนู -> View -> Module ครับ
code จะอยู่ในส่วน Global -> Declaration และ Event ครับ  ?????

ตัวอย่าง code จาก  SYSTEM-OPD-RG0110-1
sql เลือก   select 1 from pttype limit 1

<<<<<<---  Declaration -->>>>>>
      ds1,ds2,d1,d2:string;
   td1,td2:tdatetime;
      pc1,pc2,pc3,pc4,pc5,pc6,pc7:string;
      dm1,ht1,new_dm1,new_ht1,baby_vn,fp_vn,anc_vn:string;
   service_exclude_cri:string;
   pt_subtype_cri:string;
   pt_subtype_cri_pcu:string;
   
   
  <<<<<<--- Event -->>>>>>  
     GetDateRangeDialog(td1, td2);
     ds1:=formatdatetime('yyyy-mm-dd',td1);
     ds2:=formatdatetime('yyyy-mm-dd',td2);
          d1:=ds1;
     d2:=ds2;
     
  pc1 := getsqlsubquerydata('select pttype from pttype where pcode in ("A2")');
  pc2 := getsqlsubquerydata('select pttype from pttype where pcode in ("A7")');
  pc3 :=
    getsqlsubquerydata('select pttype from pttype where pcode in ("UC","UA")');
  pc4 :=
    getsqlsubquerydata('select pttype from pttype where pcode in ("AA","AB","AC","AD","AE","AF","AG","AH","AI","AJ","AK","UB")');
  
  pc5 := getsqlsubquerydata('select pttype from pttype where pcode in ("AL")');
  
  pc6 := getsqlsubquerydata('select pttype from pttype where pcode in ("AM")');
  
  pc7 := getsqlsubquerydata('select pttype from pttype where pcode not in (' +
    '"A2","A7","UC","UA","UB","AA","AB","AC","AD","AE","AF","AG","AH","AI","AJ","AK",' +
    '"AL","AM" ) ');
    
  pc7:=pc7+','+getsqlsubquerydata('select pttype from pttype where pcode IS NULL');


  dm1 := getsqlsubquerydata('select hn from clinicmember where clinic="' +
    gethosvariable('dm_clinic_code') + '"');
  ht1 := getsqlsubquerydata('select hn from clinicmember where clinic="' +
    gethosvariable('ht_clinic_code') + '"');

  new_dm1 := getsqlsubquerydata('select hn from clinicmember where clinic="' +
    gethosvariable('dm_clinic_code') + '" and regdate between "' + d1 + '" and "'
      + d2 + '" ');
  new_ht1 := getsqlsubquerydata('select hn from clinicmember where clinic="' +
    gethosvariable('ht_clinic_code') + '" and regdate between "' + d1 + '" and "'
      + d2 + '" ');

  baby_vn :=
    getsqlsubquerydata('select distinct b1.vn from baby_visit b1,ovst o where o.vstdate '
    + ' between " ' + d1 + ' " and "' + d2 + '" and o.vn=b1.vn ');

  fp_vn :=
    getsqlsubquerydata('select distinct b1.vn from fp_visit b1,ovst o where o.vstdate '
    +  ' between "' + d1 + '" and "' + d2 + '" and o.vn=b1.vn ');

   anc_vn :=
    getsqlsubquerydata('select distinct b1.vn from anc_visit b1,ovst o where o.vstdate '
    +
    ' between "' + d1 + '" and "' + d2 + '" and o.vn=b1.vn ');

  service_exclude_cri:=' and vn not in ('+baby_vn+','+fp_vn+','+anc_vn+') ';
     
     
      pt_subtype_cri := ' and pt_subtype in ("0","","2") ';
      
       pt_subtype_cri_pcu := ' and pt_subtype in ("1") ';
       
     
<<<<<<<<<---ส่วนของ Variable--->>>>>>>>>>>
ผู้ป่วยใช้สิทธิเบิกได้ pttype in (' + pc1 + ')  ช่วงวันที่ ds1-ds2 
ชื่อ รพ.--->>>>>>>>>>>  
 Value := GetSQLStringData('select hospitalname from opdconfig');
วัันที่  Value := formatdatetime('dd/mm/eeee',td1);
        Value := formatdatetime('dd/mm/eeee',td2);
 
เป็นผู้ป่วยใหม่ (count_in_year=0)  และในเครือข่าย (pttype_in_region="Y")  --->>>>>>>>>>>  

value:=getsqlintegerdata('select count(hn) as cc from vn_stat where vstdate between "' +
        d1
      + '" and "' + d2 + '" ' +
      ' and count_in_year=0 and pttype_in_region="Y" and pttype in (' + pc1 +
      ')'+pt_subtype_cri+service_exclude_cri);
      


value:=getsqlintegerdata('select count(hn) as cc from vn_stat where vstdate between "' +
        d1
      + '" and "' + d2 + '" ' +
      ' and count_in_year=0 and pttype_in_region=""  and pttype not in (' + pc1 +','+pc2+','+pc3+','+pc4+','+pc5+
      ')'+pt_subtype_cri_pcu+service_exclude_cri);


ผู้ป่วยทันตกรรม ครั้ง   --->>>>>>>>>>>  
  Value :=  getsqlintegerdata('select count(d.hn) as cc from dtmain d,vn_stat v where v.vstdate between "' +
        d1
      + '" and "' + d2 + '" ' +
      ' and v.vn=d.vn and v.pttype in (' + pc1 + ')');
      

ผู้ป่วยรับบริการ วางแผนครอบครัว   อื่น ๆ   d.fp_code not in ( 3,6,7)   --->>>>>>>>>>>  
 Value :=  getsqlintegerdata('select count(distinct v.hn) as cc from fp_visit d,vn_stat v where v.vstdate between "' +
        d1
      + '" and "' + d2 + '" ' +
      ' and v.vn=d.vn and v.pttype not in (' +pc1+','+pc2+','+ pc3+','+pc4 + ') and d.fp_code not in ( 3,6,7)  ');
      
หมันหญิง  d.fp_code = 7  --->>>>>>>>>>>  
 Value :=  getsqlintegerdata('select count(distinct v.hn) as cc from fp_visit d,vn_stat v where v.vstdate between "' +
        d1
      + '" and "' + d2 + '" ' +
      ' and v.vn=d.vn and v.pttype in (' + pc2 + ') and d.fp_code = 7');
 
 Value :=  getsqlintegerdata('select count(distinct v.hn) as cc from fp_visit d,vn_stat v where v.vstdate between "' +
        d1
      + '" and "' + d2 + '" ' +
      '  and d.fp_code  not in ( 3,6,7) and d.fp_code is not null ');

ผู้ป่วยตาย  --->>>>>>>>>>>  
 Value :=  getsqlintegerdata('select count(d.hn) as cc from death d where d.death_date between "' +
        d1
      + '" and "' + d2 + '" ' +
      ' and d.last_pttype in (' + pc3+','+pc4 + ') ');


ตรวจก่อนคลอด  d.anc_code in (10,11,12,13)--->>>>>>>>>>>  
 Value :=  getsqlintegerdata('select count(distinct v.hn) as cc from anc_visit d,vn_stat v where v.vstdate between "' +
        d1
      + '" and "' + d2 + '" ' +
      ' and v.vn=d.vn and v.pttype in (' + pc1 + ') and d.anc_code in (10,11,12,13) ');
  
  การคลอด ปกติ d.deliver_type = 1   --->>>>>>>>>>>     
 Value :=  getsqlintegerdata('select count(v.an) as cc from ipt_pregnancy d,an_stat v where v.dchdate between "' +
        d1
      + '" and "' + d2 + '" ' +
      ' and v.an=d.an and v.pttype in (' + pc1 + ') and d.deliver_type = 1');

ผู้ป่วยนอกตาย --->>>>>>>>>>>  
 Value :=  getsqlintegerdata('select count(d.hn) as cc from death d where d.death_date between "' +
        d1
      + '" and "' + d2 + '" ' +
      ' and d.last_pttype not in (' + pc1 +','+pc2+','+pc3+','+pc4+ ') ');
      
แม่ตาย --->>>>>>>>>>>  
 Value :=  getsqlintegerdata('select count(v.an) as cc from ipt_pregnancy d,an_stat v where v.dchdate between "' +
        d1
      + '" and "' + d2 + '" ' +
      ' and v.an=d.an  and d.death="Y"');


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ตัวอย่าง code จาก  SYSTEM-OPD-PTTYPE-SUMMARY
sql เลือก    select * from pttype order by pttype
  <<<<<<--- Declaration -->>>>>>>  
   date1,date2 : TDateTime;
   ds1,ds2 : String;
   S : String;
   
   <<<<<<--- Event -->>>>>>  
begin
    GetDateRangeDialog(date1, date2);    
       ds1:=formatdatetime('yyyy-mm-dd',date1);
    ds2:=formatdatetime('yyyy-mm-dd',date2);
    
    
end;


 <<<<<<<<<---ส่วนของ Variable--->>>>>>>>>>>  
 
( ตามสิทธิ and '+' pttype = "'+DBPipeline['pttype']+'  ผู้ป่วยใหม่  ' and count_in_year=0'  )--->>>>>>>>>>>  
  s:=   GetSQLStringData('select count(*) as cc from vn_stat '+
' where vstdate between "'+ds1+'" and "'+ds2+'" and '+
' pttype = "'+DBPipeline['pttype']+'"'+
' and count_in_year=0');
  Value := s;

 เรียงตามสิทธิ  รวมค่ารักษาที่เกิดขึ้น sum(income)--->>>>>>>>>>>   
s:=   GetSQLStringData('select sum(income) as cc from vn_stat '+
' where vstdate between "'+ds1+'" and "'+ds2+'" and '+
' pttype = " '+DBPipeline['pttype']+' " '+' ');
  if s='' then s:='0';
  Value := strtofloat(s);

สรุปค่ารักษาผู้ป่วยในแยกตามสิทธิการรักษา (รายการชำระเงิน)
SQL  select * from pttype where isuse = "Y" order by pttype 

 
รายการจ่ายเงินผู้ป่วยใน DC (ค่า income_group="01")
  Value:=   GetSQLDoubleData('select sum(r.rcptamt) as cc from an_stat v,rcpt_print p,rcpt_print_detail r '+
            ' where v.dchdate between "'+ds1+'" and "'+ds2+'" and '+
            ' v.pttype = "'+DBPipeline['pttype']+'"'+
            ' and v.an = p.vn and p.department="IPD" and p.finance_number= r.finance_number and r.paidst in ("01","03") and r.income in ('+
            getsqlsubquerydata('select income from income where income_group="01" ')
            +')');
  รวมค่าบริการทุกสิทธิ์ income=17
  Value:=   GetSQLDoubleData('select sum(r.rcptamt) as cc from an_stat v,rcpt_print p,rcpt_print_detail r '+
            ' where v.dchdate between "'+ds1+'" and "'+ds2+'" and '+
            ' v.an = p.vn and p.department="IPD" and p.finance_number= r.finance_number and r.paidst in ("01","03") and r.income in ('+
            getsqlsubquerydata('select income from income where income_group="17" ')
            +')');
            
   
value:=getsqlintegerdata('select count(hn) as cc from vn_stat where vstdate between "' +
        d1
      + '" and "' + d2 + '" ' +
      ' and  pttype_in_region<>"Y" and pttype in (' + pc1 +
      ')'+zmain_pdx);


Value:=   GetSQLStringData('select sum(income) as cc from an_stat '+
' where dchdate between "'+ds1+'" and "'+ds2+'" and '+
' pcode = "A2" '+' ');
    
    
  

 :P   -------------------------------------------------------------------------------------------------------------------------------------------------- :P 
   
ผู้ป่วยประกันสังคม
update ovst set doctor="01" where pttype="04" 
update ovst set hospmain="10705" where pttype="04" 
    
ยานอกบัญชี
 select icode,name,drugaccount from drugitems    where     drugaccount=''
    
 การกำหนด Visible  
  Label42.Visible := DBPipeline['an'] > '0';  
(ถ้า an > 0 ให้มองเห็น label42)
อีกแบบหนึ่ง ใช้ Variable (if ...then... else if)
procedure Variable2OnCalc(var Value: Variant);
begin
Label12.visible:=False;
Label21.visible:=False;
Label23.visible:=False;
Label29.visible:=False;

if   DBPipeline['spclty']='09' then Label12.visible:=True
else if DBPipeline['spclty']='08' then Label21.visible:=True
else if DBPipeline['spclty']='02' then Label23.visible:=True
else Label29.visible:=True;

end;


การแปลงค่าเป็นตัวหนังสือ

.ที่หน้าต่าง Design แบบรายงานน่ะ  ให้ golf ไปคลิ๊กที่ system variable ตัวนั้น เช่น sum(mon11) ....

....แล้ว ดูตรง Report Tree ด้านบนซ้าย ว่า system variable ตัวนี้ชื่ออะไร จะมีเป็น highlight ทับที่ชื่อของ system variable ตัวนี้อยู่....
 
....เช่น sum(mon11) ตัวนี้มีชื่อว่า  DBCalc1  ก็ใช้คำสั่งเป็น

Value :=ThaiMoney(DBCalc1.value) ;


...กรณีแรก ใช้จากค่าของ  DBPipeline สมมุติว่าคือ mon1 มีค่าเท่ากับ  120.00

 ....ตัวอย่าง....

Value :=  ThaiMoney(DBPipeline['mon1']) ;
 
 ผลที่ได้คือ     หนึ่งร้อยยี่สิบบาท

   
 Value :=  '('+ThaiMoney(DBPipeline['mon1'])+')' ;

 ผลที่ได้คือ     (หนึ่งร้อยยี่สิบบาท)

....กรณีที่ 2 ใช้ค่าจาก Variable สมมุติว่าคือ  variable1  มีค่าเท่ากับ  96

....ตัวอย่าง....
 
Value :=ThaiMoney(variable1.value) ;

 ผลที่ได้คือ     เก้าสิบหกบาท


Value :='('+ThaiMoney(variable1.value)+')' ;

 ผลที่ได้คือ    (เก้าสิบหกบาท)

การ join ตาราง 

ตัวอย่าง การนับจำนวนค่าการกรอกข้อมูลในฟิลด์ bpd,bps,bw,pulse,temperature โดยไม่นับจำนวนช่องว่างและค่าที่เป็นศูนย์ เฉพาะผู้ป่วยที่ส่งไปยังจัดซักประวัติ

SELECT ov.vstdate,count(o1.vn) AS bps_count,count(o2.vn) AS bpd_count,count(o3.vn) AS bw_count,count(o4.vn) AS pulse_count,count(o5.vn) AS temp_count
FROM ovst ov
LEFT OUTER JOIN opdscreen o1 ON o1.vn = ov.vn AND o1.bps > 0
LEFT OUTER JOIN opdscreen o2 ON o2.vn = ov.vn AND o2.bpd > 0
LEFT OUTER JOIN opdscreen o3 ON o3.vn = ov.vn AND o3.bw > 0
LEFT OUTER JOIN opdscreen o4 ON o4.vn = ov.vn AND o4.pulse>0
LEFT OUTER JOIN opdscreen o5 ON o5.vn = ov.vn AND o5.temperature > 0
WHERE ov.vstdate BETWEEN "2007-09-01" AND "2007-09-06" AND ov.main_dep = "010"
GROUP BY ov.vstdate

การใช้ set@d1 สร้างรายงานที่ใช้เงื่อไขประกาศตัวแปล ตัวอย่างเป็นรายงาน ประเภทการให้บริการ ER
set @d1 = '2008-01-01';
set @d2 = '2008-01-31';

select count(*),b.name
from er_regist  a

left outer join er_emergency_type b on a.er_emergency_type=b.er_emergency_type
where vstdate between @d1 and @d2
group by b.name
union all
select count(*),b.name
from er_regist  a

left outer join er_dch_type b on a.er_dch_type =b.er_dch_type
where vstdate between @d1 and @d2
group by b.name
union all
select count(*),c.name
from er_regist  a

left outer join er_period c on a.er_period  =c.er_period
where vstdate between @d1 and @d2
group by c.name
union all
select count(*),d.name
from er_regist  a

left outer join er_pt_type d on a.er_pt_type =d.er_pt_type
where vstdate between @d1 and @d2
group by d.name


ระยะเวลารอคอยเฉลี่ย (แบบแยก
select * ,sec_to_time(time_to_sec(service12)-time_to_sec(service3)) as totaltime
from service_time
where vstdate  between'2008-05-15' and '2008-05-15'
and service12>=service3
order by vstdate,vn asc
ระยะเวลารอคอยเฉลี่ย (แบบเฉลี่ย)
select   sec_to_time(avg(sec_to_time(time_to_sec(service6)-time_to_sec(service12)))) as total_time
     from service_time s
    where s.vstdate between "2007-09-30" and   "2008-10-01"
    and s.service12 is not null and s.service6 is not null
    and s.service12 >= "08:00:00" and s.service6 <= "16:30:30"
   and s.service6 > s.service12
   
   ระยะเวลารอคอยเฉลี่ย (ห้องฟัน)
select   sec_to_time(avg(sec_to_time(time_to_sec(end_time)-time_to_sec(begin_time)))) as avg_time
     from dtmain s
    where s.vstdate between "2008-11-18" and   "2008-11-19"
    and s.end_time is not null and s.begin_time is not null
    order by vstdate,vn asc
    
  การมาตรวจซ้ำ ใน 48 hr
    select count(hn) as ptcount,hn,pdx
 from vn_stat
where vn in
( select vn from er_regist
   where vstdate between '2008-05-01' and '2008-05-31')
and lastvisit_hour<=48
and pdx not like 'Z%'
group by hn,pdx
having count(hn)>1
order by vstdate

การใช้ If sum count 
select v.pcode,
COUNT(if(d.count_in_year =0,1,null)) as newpt ,
COUNT(if(d.count_in_year >0,1,null)) as oldpt ,
count(d.vn) as cc
from dt_list d
inner join vn_stat v on v.vn=d.vn
left join  pttype p on v.pttype=p.pttype
where v.vstdate between "2008-12-01" and "2008-12-30"
and v.aid like "4304%"
group by  p.pcode


select v.pcode,
SUM(d.count_in_year =0) as newpt ,
SUM(d.count_in_year >0) as oldpt ,
count(d.vn) as cc
from dt_list d
inner join vn_stat v on v.vn=d.vn
left join  pttype p on v.pttype=p.pttype
where v.vstdate between "2008-12-01" and "2008-12-30"
and v.aid like "4304%"
group by  p.pcode
 
 
 
แปลง  VN  เป็น วันที่
select vn ,
concat(substr(vn,5,2)) as dd,
concat(substr(vn,3,2)) as mm,
concat('25',lpad(vn,2,0)) as yyyy,
concat(concat(substr(vn,5,2)),'/',concat(substr(vn,3,2)),'/',concat('25',lpad(vn,2,0)))as dmy
from ovst 
where vstdate > '2015-01-01'
limit 5 


จาก : http://jda-memo.blogspot.com/2014/08/mysql-code-hosxp.html

คำสั่ง Update patient ของ รพ.

 UPDATE patient SET type_area = "4"  WHERE chwpart = "31" AND amppart = "11" AND tmbpart = "02"  AND...