BMS-HOSxP Community
HOSxP => การเขียน SQL Script => ข้อความที่เริ่มโดย: nan_it ที่ กันยายน 12, 2011, 12:13:05 PM
-
คือผมกำลังเขียนรายงาน ผู้ป่วยเบาหวาน ที่ตรวจ FBS ปัญหาคือผมจะเปลี่ยนค่าใน lab_order_result ให้เป็นตัวอักษร
เช่น คนไข้ที่มีค่า FBS ต่ำกว่า 130 ให้แทนด้วย A 130-180 ให้แทนด้วย B ประมาณนี้ครับ แนะนำหน่อยครับ
-
คือผมกำลังเขียนรายงาน ผู้ป่วยเบาหวาน ที่ตรวจ FBS ปัญหาคือผมจะเปลี่ยนค่าใน lab_order_result ให้เป็นตัวอักษร
เช่น คนไข้ที่มีค่า FBS ต่ำกว่า 130 ให้แทนด้วย A 130-180 ให้แทนด้วย B ประมาณนี้ครับ แนะนำหน่อยครับ
น่าจะประมาณนี้รึป่าวครับ
if lab_order_result < 130 then value := 'A';
-
ผมลองนำเงื่อนไขไปใช่ดู ค่าที่ได้มันยังไม่ถูกทั้งหมดครับ คือ ผมกำหนดให้ค่าที่มากกว่า 180 เท่ากับ C พอลองตรวจสอบดู ฟิลล์ที่มีค่า 93 98 84 ประมาณนี้ ออกมาเป็น C หมดครับ แนะนำหน่อยครับ
-
if lab_order_result < 130 then
begin
value := 'A';
end
else begin
if lab_order_result >= 180 then
begin
value := 'C';
end
else begin
value := 'B';
end;
end;
-
if lab_order_result < 130 then
begin
value := 'A';
end
else begin
if lab_order_result >= 180 then
begin
value := 'C';
end
else begin
value := 'B';
end;
end;
เขียนแล้วครับ ข้อมูลยังผิดอยู่ครับ ไม่ทราบว่าต้องแปลงข้อมูลในฟิลล์ให้เป็น int ก่อนหรือเปล่าครับ
-
if strtoint(lab_order_result) < 130 then
begin
value := 'A';
end
else begin
if strtoint(lab_order_result) >= 180 then
begin
value := 'C';
end
else begin
value := 'B';
end;
end;
-
ผมลองนำเงื่อนไขไปใช่ดู ค่าที่ได้มันยังไม่ถูกทั้งหมดครับ คือ ผมกำหนดให้ค่าที่มากกว่า 180 เท่ากับ C พอลองตรวจสอบดู ฟิลล์ที่มีค่า 93 98 84 ประมาณนี้ ออกมาเป็น C หมดครับ แนะนำหน่อยครับ
if lab_order_result < 130 then value := 'A'
else if lab_order_result >= 180 value :='C'
else if......;
ก็ลองเปลี่ยนพวกตัวแปลหรือ variable เป็น integer หรือ Double ดูอ่ะครับ
-
if strtoint(lab_order_result) < 130 then
begin
value := 'A';
end
else begin
if strtoint(lab_order_result) >= 180 then
begin
value := 'C';
end
else begin
value := 'B';
end;
end;
ผมลองใช้ strtoint แล้วไม่ผ่านครับ
if GetSQLStringData('select lab_order_result from lab_order where lab_order_number = "'+DBPipeline['lab_order_number']+'"') < '130' then
begin
Value := 'A' ;
end
else
if (GetSQLStringData('select lab_order_result from lab_order where lab_order_number = "'+DBPipeline['lab_order_number']+'"') > '130') and (GetSQLStringData('select lab_order_result from lab_order where lab_order_number = "'+DBPipeline['lab_order_number']+'"') < '180') then
begin
Value := 'B' ;
end
else
if GetSQLStringData('select lab_order_result from lab_order where lab_order_number = "'+DBPipeline['lab_order_number']+'"') > '180' then
begin
Value := 'C' ;
end
ผมเขียนแบบนี้ครับ แนะนำหน่อยครับ
-
ลองแบบนี้ดูนะครับ ;)
value:=GetSqlStringData('select if(lab_order_result<130,"A",if(lab_order_result>=180,"C","B"))as result from lab_order where lab_items_code="'+รหัสของ lab_items_code+'" and vn="'+เลข vn คนไข้+'");
-
if lab_order_result < 130 then
begin
value := 'A';
end
else begin
if lab_order_result >= 180 then
begin
value := 'C';
end
else begin
value := 'B';
end;
end;
เขียนแล้วครับ ข้อมูลยังผิดอยู่ครับ ไม่ทราบว่าต้องแปลงข้อมูลในฟิลล์ให้เป็น int ก่อนหรือเปล่าครับ
Data type ของฟิลนี้เป็น varchar ครับ ถ้า if แบบนี้มันจะมองว่าเป็นเลข 1 3 0 แยก กัน ไม่ใช่ 130 พอมันเจอค่า 78 หรือ 78 ซึ่ง 7 มากกว่า 1 ทำให้ผลที่ได้ผิดครับ
(เวลาเป็น varchar จะมองเฉพาะตัวแรกอย่างเดียวก่อนแล้วค่อยไล่ไปตำแหน่งถัดไป)
ถ้าไงลอง code แบบด้านบนดูนะครับ
-
โปรแกรม error แบบนี้ครับ
-
โปรแกรม error แบบนี้ครับ
โทษทีครับ ตก ' ไปตัวครับ
value:=GetSqlStringData('select if(lab_order_result<130,"A",if(lab_order_result>=180,"C","B"))as result from lab_order where lab_items_code="'+รหัสของ lab_items_code+'" and vn="'+เลข vn คนไข้+'"');
-
ที่เครื่อหมาย ' ตกไปผมแก้แล้วครับ มันก้ยัง error ครับ ผมลองเปิดโปรแกรม HOSxP ขึ้นมาพร้อมกันด้วย ใช้ได้แล้วครับ ขอบคุณมากครับ