คำสั่ง 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