BMS-HOSxP Community
HOSxP => แจ้งปัญหา / ขอความช่วยเหลือ => ข้อความที่เริ่มโดย: vampire ที่ พฤศจิกายน 14, 2009, 14:46:59 PM
-
ทำใน varible ครับอยากให้ count(hn) แล้ว Group by hn ด้วย แต่ออก 1 ครับ
Value := GetSQLDoubleData('select count(hn) from ovst '+
'where vstdate between "'+ISO2Date(GetUserParameter(0),'yyyy-mm-dd')+'" and " '+ISO2Date(GetUserParameter(1),'yyyy-mm-dd')+'" '+
'Group by hn');
ต้องแก้อย่างไรครับ ท่าน อาจารย์ครับ
-
ตัดคำว่า Group by hn ออก ก็น่าจะได้นะครับ ลองดูครับ
Value := GetSQLDoubleData('select count(hn) from ovst '+
'where vstdate between "'+ISO2Date(GetUserParameter(0),'yyyy-mm-dd')+'" and " '+ISO2Date(GetUserParameter(1),'yyyy-mm-dd')+'" ');
-
งงกับความต้องการ ต้องการนับอะไรครับ
ขอเดาว่าความต้องการก็คือ จะนับ visit จาก ovst โดยนับว่าแต่ละคนเคยมารับบริการกี่ครั้งในช่วงเวลาที่กำหนดถูกหรือเปล่าครับ (แต่ข้อมูลพวกนี้เค้าไม่ค่อยนับกันอยู่แล้ว)
ถ้าตามนี้ output ก็จะต้องมี 2 ค่าคือ
- hn
- จำนวนครั้งที่มา visit เพราะ 1 record คือ 1 visit
แต่ ??? ทำไมถึงใช้ Variable ดึงอ่ะครับเพราะ variable จะใช้ดึงค่า ๆ เดียว (ไม่เคยทำแบบหลายฟิล์สักทีแม้แต่ดึงทีละหลาย reccord ก็ยังไม่เคยทำเลยครับ คิดว่าไม่น่าจะทำได้)
ผมเสนอว่าลองใช้ DBPipeline ตัวอื่นดูครับ เช่น
ChangeDBPipeLineLink1SQL(<sql>);
ChangeReportSQL(<sql>);
<sql> คือคำสั่ง sql ที่ต้องการ เมื่อเขียนโค้ดเสร็จ previews 1 รอบ แล้วกับมาหน้าออกแบบรายงาน
สังเกตด้านขวาตรง Datatree กดเลือกตัวที่เราใช้ครับ เช่นถ้าใช้คำสั่ง ChangeDBPipeLineLink1SQL(<sql>); ก็ไปกดที่ DBPipeLineLinks1
แล้วจะมี Fields For DBPipeline ให้เราเลือกครับ ฟิลพวกนี้มาจากคำสั่ง sql ของเราที่ใส่ไปในฟังก์ชัน
ส่วนค่าต่าง ๆ ที่จะใส่ใน report ก็สามารถนำ DBText มาวางได้เลย (เลือก DBPiepeline ให้ถูกตัวด้วย)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ส่วนคำสั่ง sql ที่ให้มา ถ้าต้องการ group by hn จริง ๆ ให้ใช้ Group by count(hn) แทนครับ
แต่ผลลัพท์ที่ได้คงเอาไปทำอะไรต่อไม่ได้ เพราะค่าที่ได้คือค่า ๆ เดียวครับ
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
แต่ถ้าตัด Group by ออก จะเป็นการนับ visit ผู้ป่วยนอกทั้งหมดตามช่วงเวลาที่กำหนดครับ
ที่ต้องการน่าจะเป็นตัวนี้หรือเปล่าครับ
-
เท่าที่ดูและผมตีความโจทย์ออกมาแล้ว เหมือนกับว่า ต้องการนับเป็น คน คือ 1 คนมา 2 visit ก็นับเป็น 1
ที่ผมใช้คือตัวนี้ครับ
Value := GetSQLDoubleData('select count(distinct(hn)) from ovst '+
'where vstdate between "'+ISO2Date(GetUserParameter(0),'yyyy-mm-dd')+'" and " '+ISO2Date(GetUserParameter(1),'yyyy-mm-dd')+'" ');
2,3,4,...,N visit แต่นับ 1
-
ตามที่ ท่าน SoRnKuNg บอกละครับ ผมคงบอกตามต้องการไม่ชัดเจน
ได้ข้อมูลแล้วครับ ขอบคุณมากเลยครับ ท่าน อ. ทุกท่าน ;D ;D