BMS-HOSxP Community

HOSxP => MySQL => ข้อความที่เริ่มโดย: atit ที่ กันยายน 25, 2009, 18:07:27 PM

หัวข้อ: ถามเกี่ยวกับ คำสั่ง SQL
เริ่มหัวข้อโดย: atit ที่ กันยายน 25, 2009, 18:07:27 PM
ใช้คำสั่ง
select count(*)as cc
 from lab_head h
left outer join lab_order o1 on o1.lab_order_number=h.lab_order_number and o1.confirm="Y"
   and o1.lab_order_result<>"" and o1.lab_order_result is not NULL
where  h.order_date between "2009-09-20" and "2009-09-24"   and o1.lab_items_code in(66,3088)
group by h.hn
having count(h.hn)<2

แต่อยากได้ผลรวมว่าทั้งหมดกี่คนเพื่อเอาไปใส่ใน variable ต้องใช้คำสั่งแบบใหนครับ ;D
ขอบคุณล่วงหน้าครับ
หัวข้อ: Re: ถามเกี่ยวกับ คำสั่ง SQL
เริ่มหัวข้อโดย: atit ที่ กันยายน 25, 2009, 18:08:12 PM
รูปที่ดึงมาได้ครับ
หัวข้อ: Re: ถามเกี่ยวกับ คำสั่ง SQL
เริ่มหัวข้อโดย: armds ที่ กันยายน 25, 2009, 21:43:58 PM
เอาแบบนี้ได้ไหมครับ 
ความหมายคือ  จะ  count  ให้เป็นจำนวนคนใช่ไหมครับ

select count(*)as cc
from vn_stat  h
where h.hn in(select hn from lab_order
where confirm="Y" and lab_order_result<>'' and lab_order_result is not null
and vstdate between "2009-09-20" and "2009-09-24"   and lab_items_code in("66","3088") )

อืมใช่  ผมลืม  ไป   lab_order  ไม่มี  hn  ต้องไป  join  กับ  lab_hard  อีกครับ  ตามคุณ  atit  แจ้งมาถูกแล้วครับ
   
หัวข้อ: Re: ถามเกี่ยวกับ คำสั่ง SQL
เริ่มหัวข้อโดย: nuttavut ที่ กันยายน 25, 2009, 21:54:00 PM
แบบคุณอาร์มก็ได้ หรือถ้าต้องการแบบนี้ก็ลองไปใช้ดูครับ.... ;D ;D

 
โค๊ด: [Select]
a:= GetSQLSubQueryData('select h.hn  '+
       ' from lab_head h  '+
       ' left outer join lab_order o1 on o1.lab_order_number=h.lab_order_number and o1.confirm="Y"   '+
       ' and o1.lab_order_result<>"" and o1.lab_order_result is not NULL  '+
       ' where  h.order_date between "'+formatdatetime('yyyy-mm-dd',rxdate1)+'" and "'+
          formatdatetime('yyyy-mm-dd',rxdate2)+'"   and o1.lab_items_code in("4","15") '+
       ' group by h.hn  '+
       ' having count(h.hn) >= 2 ');

  Value :=GetSQLStringData('select count(distinct hn)as cc from lab_head where hn in('+a+') ') ;
หัวข้อ: Re: ถามเกี่ยวกับ คำสั่ง SQL
เริ่มหัวข้อโดย: atit ที่ กันยายน 25, 2009, 23:05:14 PM
เอาแบบนี้ได้ไหมครับ 
ความหมายคือ  จะ  count  ให้เป็นจำนวนคนใช่ไหมครับ

select count(*)as cc
from vn_stat  h
where h.hn in(select hn from lab_order ตารางนี้ไม่มี  hn ครับ
where confirm="Y" and lab_order_result<>'' and lab_order_result is not null
and vstdate between "2009-09-20" and "2009-09-24"   and lab_items_code in("66","3088") )

ปล.  แต่ถ้าเป็นแบบของคุณ atit  จะตัด  HN ที่มาซ้ำ 2 ครั้งออกนะ(ใช่ไหมครับ )   ***  ผลจะเท่ากับ 3
       แต่อันนี้จะไม่ตัดออก แต่นับเป็น 1 คน  ครับ                                               *** ผลจะเท่ากับ 4
   
เนื่องจากนับจาก vn_stat ที่มี hn ที่ดึงมาเลยนับมาหมดเลยมาตรวจอะไรก็นับหมดที่เป็น HN นี้ก็เลยไม่ตรงครับ
อ้อผมแก้ใหม่นะครับเป็น
select count(*)as cc
from vn_stat  v
where v.hn in(select h.hn from lab_head h
left outer join lab_order o1 on o1.lab_order_number=h.lab_order_number and o1.confirm="Y"
        and o1.lab_order_result<>"" and o1.lab_order_result is not NULL
        where  h.order_date between "2009-09-20" and "2009-09-24"   and o1.lab_items_code in("66","3088") )
แบบคุณอาร์มก็ได้ หรือถ้าต้องการแบบนี้ก็ลองไปใช้ดูครับ.... ;D ;D

 
โค๊ด: [Select]
a:= GetSQLSubQueryData('select h.hn  '+
       ' from lab_head h  '+
       ' left outer join lab_order o1 on o1.lab_order_number=h.lab_order_number and o1.confirm="Y"   '+
       ' and o1.lab_order_result<>"" and o1.lab_order_result is not NULL  '+
       ' where  h.order_date between "'+formatdatetime('yyyy-mm-dd',rxdate1)+'" and "'+
          formatdatetime('yyyy-mm-dd',rxdate2)+'"   and o1.lab_items_code in("4","15") '+
       ' group by h.hn  '+
       ' having count(h.hn) >= 2 ');

  Value :=GetSQLStringData('select count(distinct hn)as cc from lab_head where hn in('+a+') ') ;
ผมตั้ง a:string; นะครับเหมือนว่าจะได้แต่ก็นับได้แค่ 1 ครับน่าจะเท่ากับ 3ก็เลยยังงงอยู่เลย

a:= GetSQLSubQueryData('select count(h.hn)  '+
       ' from lab_head h  '+
       ' left outer join lab_order o1 on o1.lab_order_number=h.lab_order_number and o1.confirm="Y"   '+
       ' and o1.lab_order_result<>"" and o1.lab_order_result is not NULL  '+
       ' where  h.order_date between "'+ds1+'" and "'+ds2+'"   and o1.lab_items_code in("66","3088") '+
       ' group by h.hn  '+
       ' having count(h.hn) < 2 ');   
ผิดตรงใหนหรือเปล่าครับ ;D
ขอบคุณทุกท่านที่ตอบครับ
ยังรอคอยคำตอบต่อไป ;D
หัวข้อ: Re: ถามเกี่ยวกับ คำสั่ง SQL
เริ่มหัวข้อโดย: atit ที่ กันยายน 26, 2009, 00:27:25 AM
หลังจากที่ไม่ยอมแพ้ จากเที่ยงวัน ยันเที่ยงคืน ก็สำเร็จแล้วครับ ดังนี้
select count(hn)as cc
from lab_head lh
left outer join lab_order_service los on los.lab_order_number=lh.lab_order_number
where hn in(select h.hn
         from lab_head h
         left outer join lab_order o1 on o1.lab_order_number=h.lab_order_number and o1.confirm="Y"
         and o1.lab_order_result<>"" and o1.lab_order_result is not NULL
         where  h.order_date between "2009-09-20" and "2009-09-24"   and o1.lab_items_code in("66","3088")
         group by h.hn
         having count(h.hn) < 2)
and lh.order_date between "2009-09-20" and "2009-09-24" and los.lab_code in("66","3088")
ต้องขอบคุณ อ.ทุกท่านที่ช่วยเหลือด้านแนวคิดและตัวอย่างที่เสนอมาครับ ;D

ปล ควรใช้แบบcode ของ อ.nuttawut นะครับ ไม่งั้นจะดึงได้ช้าจนทำให้ระบบอืดได้(คำสั่งถูกแต่วางรูปแบบผิด นี่เป็นอีกเหตุผลหนึ่งที่ควรไปเรียนการเขียนรายงานกับ BMS ครับ)
หัวข้อ: Re: ถามเกี่ยวกับ คำสั่ง SQL
เริ่มหัวข้อโดย: armds ที่ กันยายน 26, 2009, 08:48:08 AM
อืม ดีใจด้วยครับ   :)
ถามนิดหน่อยครับ  คุณ  atit  อยากได้รายงานแบบไหนเหรอครับ 
นับจำนวนคนที่สั่ง  lab_items_code in("66","3088")  ที่ไม่สั่งซ้ำ  หรือไม่นับคนที่สั่ง 2 ครั้ง  หรือเปล่าครับ 

ปล. ผมเขียนแบบยังไม่ได้  run  ดูก็เลยไม่พบ  error 
      การเขียนคำสั่ง  ขึ้นอยู่การนำไปใช้  ไม่ได้หมายถึงจะเขียนผิด  รูปแบบถูก  แต่ผลลัพ ต่างกัน ครับ   
      ขึ้นอยู่ที่ท่านต้องการแบบไหนมากกว่าครับ
หัวข้อ: Re: ถามเกี่ยวกับ คำสั่ง SQL
เริ่มหัวข้อโดย: nuttavut ที่ กันยายน 26, 2009, 11:16:28 AM
อืม ดีใจด้วยครับ   :)
ถามนิดหน่อยครับ  คุณ  atit  อยากได้รายงานแบบไหนเหรอครับ 
นับจำนวนคนที่สั่ง  lab_items_code in("66","3088")  ที่ไม่สั่งซ้ำ  หรือไม่นับคนที่สั่ง 2 ครั้ง  หรือเปล่าครับ 

ปล. ผมเขียนแบบยังไม่ได้  run  ดูก็เลยไม่พบ  error 
      การเขียนคำสั่ง  ขึ้นอยู่การนำไปใช้  ไม่ได้หมายถึงจะเขียนผิด  รูปแบบถูก  แต่ผลลัพ ต่างกัน ครับ   
      ขึ้นอยู่ที่ท่านต้องการแบบไหนมากกว่าครับ


ใช่แล้วครับ อย่างที่ อ.อาร์ม ว่าหล่ะ...ผมก็เดาใจท่าน atit อยู่ว่า จริงๆต้องการแบบไหน..บางครั้ง ผลลัพเหมือนกันแต่วิธีอาจต่างกันได้ ...ขึ้นอยู่กับว่าชอบแบบไหน... ;D ;D
หัวข้อ: Re: ถามเกี่ยวกับ คำสั่ง SQL
เริ่มหัวข้อโดย: atit ที่ กันยายน 27, 2009, 11:35:50 AM
อืม ดีใจด้วยครับ   :)
ถามนิดหน่อยครับ  คุณ  atit  อยากได้รายงานแบบไหนเหรอครับ 
นับจำนวนคนที่สั่ง  lab_items_code in("66","3088")  ที่ไม่สั่งซ้ำ  หรือไม่นับคนที่สั่ง 2 ครั้ง  หรือเปล่าครับ 

ปล. ผมเขียนแบบยังไม่ได้  run  ดูก็เลยไม่พบ  error 
      การเขียนคำสั่ง  ขึ้นอยู่การนำไปใช้  ไม่ได้หมายถึงจะเขียนผิด  รูปแบบถูก  แต่ผลลัพ ต่างกัน ครับ   
      ขึ้นอยู่ที่ท่านต้องการแบบไหนมากกว่าครับ

ไม่ได้หมายถึงใครเขียนถูกเขียนผิดนะครับแต่ผมหมายถึงถ้าวางรูปแบบตามที่ผมโพสจดึงข้อมูลได้ช้าครับแต่ถ้าวางรูปแบบตามท่น nut จะดึงได้เร็วขึ้นครับ
ต้องขออภัยที่ทำให้ งง ครับพอดีอยากทำให้เสร็จแล้วค่อยจะเอามาแจกอีกทีครับ
ที่อยากได้คือ
1.จำนวนคนไข้ที่ตรวจ lab_items_code in("66","3088") เพียง 1 ครั้งใน 1 เดือน
2.จำนวนคนไข้ที่ตรวจ lab_items_code in("66","3088") เพียง 1 ครั้งใน 1 เดือนแล้วให้ผลบวกกี่ราย
3.จำนวนคนไข้ที่ตรวจ lab_items_code in("66","3088") จำนวน 2 ครั้งใน 1 เดือน
4.จำนวนคนไข้ที่ตรวจ lab_items_code in("66","3088") จำนวน 2 ครั้งใน 1 เดือนแล้วให้ผลบวกกี่ราย
5.จำนวนคนไข้ที่ตรวจ lab_items_code in("66","3088") มากกว่า 2 ครั้งใน 1 เดือน
6.จำนวนคนไข้ที่ตรวจ lab_items_code in("66","3088") มากกว่า 2 ครั้งใน 1 เดือนแล้วให้ผลบวกกี่ราย
ประมาณนี้ครับ
ขอคำแนะนำเพิ่มเติมด้วยนะ ครับ ;D
หัวข้อ: Re: ถามเกี่ยวกับ คำสั่ง SQL
เริ่มหัวข้อโดย: redfireball ที่ กันยายน 27, 2009, 21:43:57 PM
ประมาณนี้เปล่าครับ  ??? ???
3.จำนวนคนไข้ที่ตรวจ lab_items_code in("66","3088") จำนวน 2 ครั้งใน 1 เดือน
having count(h.hn) = 2
5.จำนวนคนไข้ที่ตรวจ lab_items_code in("66","3088") มากกว่า 2 ครั้งใน 1 เดือน
having count(h.hn) > 2
หัวข้อ: Re: ถามเกี่ยวกับ คำสั่ง SQL
เริ่มหัวข้อโดย: atit ที่ กันยายน 27, 2009, 23:21:35 PM
ประมาณนี้เปล่าครับ  ??? ???
3.จำนวนคนไข้ที่ตรวจ lab_items_code in("66","3088") จำนวน 2 ครั้งใน 1 เดือน
having count(h.hn) = 2
5.จำนวนคนไข้ที่ตรวจ lab_items_code in("66","3088") มากกว่า 2 ครั้งใน 1 เดือน
having count(h.hn) > 2
ใช่ครับ ได้มาแล้วแต่จะนับว่ามีกี่คน
สุดท้้ายหลังจากถอยไปหลายก้าวกลับไปนอนพักผ่อนสมองกลับมาดูใหม่ ฮ่าๆเส้นผมบังภูเขาสุดท้ายก็เสร็จสมบูรณ์ครับตามนี้ครับ
http://hosxp.net/index.php?option=com_smf&Itemid=28&/topic,12019.new.html#new

 ;D ;D ;D ;D ;D
หัวข้อ: Re: ถามเกี่ยวกับ คำสั่ง SQL
เริ่มหัวข้อโดย: thannawe ที่ กันยายน 27, 2009, 23:28:48 PM
ซ๊อสหยุด อีกแล้วครับท่านอ.atit !!   ;) :D ;D :D ;) ;)