หัวหน้าให้ดึงข้อมูลจาก MSSQL Server 2000 มาใช้อ่ะค่ะ
คือหัวหน้าให้ดึงข้อมูลจาก Database ที่โปรแกรมการจัดการได้ทำขั้นน่ะค่ะ
คือไม่เข้าใจการ Query ที่โปรแกรมเค้าใช้น่ะค่ะ เลย Joint Table ไม่ถูก รบกวนแนะนำหน่อยนะคะ
Code (PHP)
select (emgood.goodid) goodid ,
(emgood.goodcode) goodcode ,
(emgood.goodname1) goodname1 ,
(emgood.goodnameeng1) goodnameeng1 ,
(emgood.maingoodunitid) maingoodunitid ,
(emgoodunit.goodunitcode) goodunitcode ,
(emgoodunit.goodunitname) goodunitname ,
(emgoodunit.goodunitnameeng) goodunitnameeng ,
(eminve.invecode) invecode,
(eminve.invename) invename,
(eminve.invenameeng) invenameeng,
(case icstockdetail.stockflag when 1 then icstockdetail.goodstockqty else 0 end) receqty ,
(case icstockdetail.stockflag when -1 then icstockdetail.goodstockqty else 0 end) payqty ,
(isnull(icstockdetail.goodstockqty*icstockdetail.stockflag,0)) remaqty_sum ,
0 remaqty ,
(icstockdetail.costflag) costflag ,
(icstockdetail.docudate) docudate ,
(icstockdetail.docuno) docuno ,
(icstockdetail.docutype) docutype ,
(icstockdetail.docutypecode) docutypecode ,
(icstockdetail.remark) remark ,
(icdocutypedt.docutypedesc+' '+
isnull((select emcust.custname from emcust where emcust.custid = icstockdetail.custid),'')+' '+
isnull((select emvendor.vendorname from emvendor where emvendor.vendorid = icstockdetail.vendorid),'')) docutypedesc ,
(icdocutypedt.docutypedesceng+' '+ isnull((select emcust.custnameeng from emcust where emcust.custid = icstockdetail.custid),'')+' '+
isnull((select emvendor.vendornameeng from emvendor where emvendor.vendorid = icstockdetail.vendorid),'')) docutypedesceng ,
(icstockdetail.listno) listno,
(icstockdetail.stockflag)stockflag,
(2)flag
from
icstockdetail
left outer join emgood on emgood.goodid=icstockdetail.goodid
left outer join eminve on eminve.inveid=icstockdetail.inveid
left outer join emgoodtype on emgood.goodtypeid = emgoodtype.goodtypeid
left outer join emgoodcate on emgood.goodcateid = emgoodcate.goodcateid
left outer join emgoodbrand on emgood.goodbrandid = emgoodbrand.goodbrandid
left outer join emgoodgroup on emgood.goodgroupid = emgoodgroup.goodgroupid
left outer join icdocutypedt on (icstockdetail.docutype = icdocutypedt.docutype) and (icstockdetail.docutypecode = icdocutypedt.docutypecode) ,
emgoodunit
where (icstockdetail.stockflag in (1, -1)) and (icstockdetail.brchid =:an_brchid or :an_brchid = 0 )
and (emgood.maingoodunitid = emgoodunit.goodunitid)
and (emgood.goodpackflag not in (:as_goodpackflag))
AND ( convert(varchar,icstockdetail.DocuDate,112) between :as_docudate1 and :as_docudate2 )
union
select (emgood.goodid) goodid ,
(emgood.goodcode) goodcode ,
(emgood.goodname1) goodname1 ,
(emgood.goodnameeng1) goodnameeng1 ,
(emgood.maingoodunitid) maingoodunitid ,
(emgoodunit.goodunitcode) goodunitcode ,
(emgoodunit.goodunitname) goodunitname ,
(emgoodunit.goodunitnameeng) goodunitnameeng ,
(eminve.invecode) invecode,
(eminve.invename) invename,
(eminve.invenameeng) invenameeng,
(0.0) receqty ,
(0.0) payqty ,
isnull((sum(ICStockDetail.GoodStockQty*ICStockDetail.StockFlag)),0) remaqty_sum ,
isnull((sum(ICStockDetail.GoodStockQty*ICStockDetail.StockFlag)),0) remaqty ,
('Y') costflag ,
(null) docudate ,
(null) docuno ,
(null) docutype,
(null) docutypecode,
(null) remark ,
('ยอดคงเหลือยกมา') docutypedesc ,
('Bring forward') DocuTypedescEng,
(1)stockflag,
(0) listno,
(1)flag
from
icstockdetail
left outer join emgood on emgood.goodid=icstockdetail.goodid
left outer join eminve on eminve.inveid=icstockdetail.inveid
left outer join emgoodtype on emgood.goodtypeid = emgoodtype.goodtypeid
left outer join emgoodcate on emgood.goodcateid = emgoodcate.goodcateid
left outer join emgoodbrand on emgood.goodbrandid = emgoodbrand.goodbrandid
left outer join emgoodgroup on emgood.goodgroupid = emgoodgroup.goodgroupid
left outer join icdocutypedt on (icstockdetail.docutype = icdocutypedt.docutype) and (icstockdetail.docutypecode = icdocutypedt.docutypecode) ,
emgoodunit
where (icstockdetail.stockflag in (1, -1)) and (icstockdetail.brchid =:an_brchid or :an_brchid = 0 )
and (emgood.maingoodunitid = emgoodunit.goodunitid)
and (emgood.goodpackflag not in (:as_goodpackflag))
AND ( convert(varchar,icstockdetail.DocuDate,112) <:as_docudate1)
group by emgood.goodid,
emgood.goodcode,
emgood.goodname1,
emgood.goodnameeng1,
emgood.maingoodunitid,
emgoodunit.goodunitcode,
emgoodunit.goodunitname,
emgoodunit.goodunitnameeng,
eminve.invecode,
eminve.invename,
eminve.invenameeng
Order by emgood.goodcode ASC,
eminve.invecode ASC,
flag,
icstockdetail.docudate ASC,
icstockdetail.StockFlag Desc,
icstockdetail.docuno ASC
ไม่อธิบายหมดก็ได้ค่ะ ขอแค่แนะนำก็ยังดีTag : PHP, Ms SQL Server 2005, Oracle, HTML/CSS, VS 2008 (.NET 3.x)
ประวัติการแก้ไข 2010-12-10 08:44:55
Date :
2010-12-08 17:20:24
By :
naked13
View :
1416
Reply :
6
พระเจ้า script query ขั้นเทพ = =' กว่าจะออกนานป่ะครับนี่
แล้วอยากถามอะไรเหรอครับ หรือให้อธิบายเฉยๆ join กันขนาดนี้ ถ้าอยากทำใหม่หรือแก้ไข ปรับปรุง เนี่ยผมว่าทำความเข้าใจข้อมูลของแต่ละ table ให้ดีก่อนด้วยดีกว่าครับ มาแกะ script จะได้ไม่งงมากด้วย
script ที่ให้มาประกอบด้วย script ขนาดใหญ่ๆ 2 script union กัน
Script #1
select (emgood.goodid) goodid ,
(emgood.goodcode) goodcode ,
(emgood.goodname1) goodname1 ,
(emgood.goodnameeng1) goodnameeng1 ,
(emgood.maingoodunitid) maingoodunitid ,
(emgoodunit.goodunitcode) goodunitcode ,
(emgoodunit.goodunitname) goodunitname ,
(emgoodunit.goodunitnameeng) goodunitnameeng ,
(eminve.invecode) invecode,
(eminve.invename) invename,
(eminve.invenameeng) invenameeng,
(case icstockdetail.stockflag when 1 then icstockdetail.goodstockqty else 0 end) receqty ,
(case icstockdetail.stockflag when -1 then icstockdetail.goodstockqty else 0 end) payqty ,
(isnull(icstockdetail.goodstockqty*icstockdetail.stockflag,0)) remaqty_sum ,
0 remaqty ,
(icstockdetail.costflag) costflag ,
(icstockdetail.docudate) docudate ,
(icstockdetail.docuno) docuno ,
(icstockdetail.docutype) docutype ,
(icstockdetail.docutypecode) docutypecode ,
(icstockdetail.remark) remark ,
(icdocutypedt.docutypedesc+' '+
isnull((select emcust.custname from emcust where emcust.custid = icstockdetail.custid),'')+' '+
isnull((select emvendor.vendorname from emvendor where emvendor.vendorid = icstockdetail.vendorid),'')) docutypedesc ,
(icdocutypedt.docutypedesceng+' '+ isnull((select emcust.custnameeng from emcust where emcust.custid = icstockdetail.custid),'')+' '+
isnull((select emvendor.vendornameeng from emvendor where emvendor.vendorid = icstockdetail.vendorid),'')) docutypedesceng ,
(icstockdetail.listno) listno,
(icstockdetail.stockflag)stockflag,
(2)flag
from
icstockdetail
left outer join emgood on emgood.goodid=icstockdetail.goodid
left outer join eminve on eminve.inveid=icstockdetail.inveid
left outer join emgoodtype on emgood.goodtypeid = emgoodtype.goodtypeid
left outer join emgoodcate on emgood.goodcateid = emgoodcate.goodcateid
left outer join emgoodbrand on emgood.goodbrandid = emgoodbrand.goodbrandid
left outer join emgoodgroup on emgood.goodgroupid = emgoodgroup.goodgroupid
left outer join icdocutypedt on (icstockdetail.docutype = icdocutypedt.docutype) and (icstockdetail.docutypecode = icdocutypedt.docutypecode) ,
emgoodunit
where (icstockdetail.stockflag in (1, -1)) and (icstockdetail.brchid =:an_brchid or :an_brchid = 0 )
and (emgood.maingoodunitid = emgoodunit.goodunitid)
and (emgood.goodpackflag not in (:as_goodpackflag))
AND ( convert(varchar,icstockdetail.DocuDate,112) between :as_docudate1 and :as_docudate2 )
union
Script #2
select (emgood.goodid) goodid ,
(emgood.goodcode) goodcode ,
(emgood.goodname1) goodname1 ,
(emgood.goodnameeng1) goodnameeng1 ,
(emgood.maingoodunitid) maingoodunitid ,
(emgoodunit.goodunitcode) goodunitcode ,
(emgoodunit.goodunitname) goodunitname ,
(emgoodunit.goodunitnameeng) goodunitnameeng ,
(eminve.invecode) invecode,
(eminve.invename) invename,
(eminve.invenameeng) invenameeng,
(0.0) receqty ,
(0.0) payqty ,
isnull((sum(ICStockDetail.GoodStockQty*ICStockDetail.StockFlag)),0) remaqty_sum ,
isnull((sum(ICStockDetail.GoodStockQty*ICStockDetail.StockFlag)),0) remaqty ,
('Y') costflag ,
(null) docudate ,
(null) docuno ,
(null) docutype,
(null) docutypecode,
(null) remark ,
('ยอดคงเหลือยกมา') docutypedesc ,
('Bring forward') DocuTypedescEng,
(1)stockflag,
(0) listno,
(1)flag
from
icstockdetail
left outer join emgood on emgood.goodid=icstockdetail.goodid
left outer join eminve on eminve.inveid=icstockdetail.inveid
left outer join emgoodtype on emgood.goodtypeid = emgoodtype.goodtypeid
left outer join emgoodcate on emgood.goodcateid = emgoodcate.goodcateid
left outer join emgoodbrand on emgood.goodbrandid = emgoodbrand.goodbrandid
left outer join emgoodgroup on emgood.goodgroupid = emgoodgroup.goodgroupid
left outer join icdocutypedt on (icstockdetail.docutype = icdocutypedt.docutype) and (icstockdetail.docutypecode = icdocutypedt.docutypecode) ,
emgoodunit
where (icstockdetail.stockflag in (1, -1)) and (icstockdetail.brchid =:an_brchid or :an_brchid = 0 )
and (emgood.maingoodunitid = emgoodunit.goodunitid)
and (emgood.goodpackflag not in (:as_goodpackflag))
AND ( convert(varchar,icstockdetail.DocuDate,112) <:as_docudate1)
group by emgood.goodid,
emgood.goodcode,
emgood.goodname1,
emgood.goodnameeng1,
emgood.maingoodunitid,
emgoodunit.goodunitcode,
emgoodunit.goodunitname,
emgoodunit.goodunitnameeng,
eminve.invecode,
eminve.invename,
eminve.invenameeng
Order by emgood.goodcode ASC,
eminve.invecode ASC,
flag,
icstockdetail.docudate ASC,
icstockdetail.StockFlag Desc,
icstockdetail.docuno ASC
Date :
2010-12-08 17:50:30
By :
salapao_codeman
งั้น อย่างแรกที่อยากรู้คือ
(emgood.goodid) goodid ,
อันนี้คือ Fields : goodid ใน table emgood ใช่หรือไม่คะ
Date :
2010-12-10 08:43:53
By :
naked13
ใช่ครับ
Date :
2010-12-11 12:14:43
By :
salapao_codeman
Code (PHP)
(case icstockdetail.stockflag when 1 then icstockdetail.goodstockqty else 0 end) receqty ,
(case icstockdetail.stockflag when -1 then icstockdetail.goodstockqty else 0 end) payqty ,
(isnull(icstockdetail.goodstockqty*icstockdetail.stockflag,0)) remaqty_sum , 0 remaqty ,
1.อันนี้หมายความว่่าอย่างไรคะ
Code (PHP)
isnull((select emcust.custname from emcust where emcust.custid = icstockdetail.custid),'')+' '+
isnull((select emvendor.vendorname from emvendor where emvendor.vendorid = icstockdetail.vendorid),'')) docutypedesc ,
(icdocutypedt.docutypedesceng+' '+ isnull((select emcust.custnameeng from emcust where emcust.custid = icstockdetail.custid),'')+' '+
isnull((select emvendor.vendornameeng from emvendor where emvendor.vendorid = icstockdetail.vendorid),'')) docutypedesceng ,
2. อันนี้หมายความว่าไงเหรอคะ
Date :
2010-12-11 13:48:18
By :
naked13
เป็นการใช้เงื่อนไข if อ่ะ ใน query command ก็สามารถใส่เงื่อนไขของการ select ให้ซับซ้อนลงไปอีกได้ด้วยอ่ะนะครับ
ปกติเราจะรู้ว่า query command เวลากำหนดเงื่อนไขให้ ตั้ง where cause ให้ถูกต้องใช่ไม๊ครับ แต่การใช้ case นี้จะเป็น การตั้งเงื่อนไขของข้อมูลที่ได้ถูกเลือกออกมาแล้วจาะ where cause ให้แสดงในแบบที่เราต้องการอีกทีน่ะครับ
คำถามที่ #1
(case icstockdetail.stockflag when 1 then icstockdetail.goodstockqty else 0 end) receqty ,
(case icstockdetail.stockflag when -1 then icstockdetail.goodstockqty else 0 end) payqty ,
(isnull(icstockdetail.goodstockqty*icstockdetail.stockflag,0)) remaqty_sum , 0 remaqty ,
แปลได้ว่า "ถ้า column icstockdetail.stockflag = 1 ให้แสดงค่าของ column icstockdetail.goodstockqty อย่างอื่นให้แสดง 0" แล้วให้แสดง
ชื่ือ column ที่ผลลัพธ์ว่า recqty
แปลได้ว่า "ถ้า column icstockdetail.stockflag = -1 ให้แสดงค่าของ column icstockdetail.goodstockqty อย่างอื่นให้แสดง 0" แล้วให้แสดง
ชื่ือ column ที่ผลลัพธ์ว่า payqty
แปลได้ว่า "ถ้า column icstockdetail.goodstockqty * icstockdetail.stockflag = null (คือไม่มีค่าใดๆเลย) ให้แสดงค่า 0 แสดง
ชื่ือ column ที่ผลลัพธ์ว่า remaqty_sum
ส่วนที่ติดมาด้วยคืออันนี้ 0 remaqty ไม่มีการทำอะไรพิเศษ แค่ให้แสดงค่า 0 ออกมาโดยใส่ชื่อ column ที่ผลลัพธ์ว่า remaqty
คำถามที่ #2
isnull((select emcust.custname from emcust where emcust.custid = icstockdetail.custid),'')+' '+
isnull((select emvendor.vendorname from emvendor where emvendor.vendorid = icstockdetail.vendorid),'')) docutypedesc ,
(icdocutypedt.docutypedesceng+' '+ isnull((select emcust.custnameeng from emcust where emcust.custid = icstockdetail.custid),'')
+' '+
isnull((select emvendor.vendornameeng from emvendor where emvendor.vendorid = icstockdetail.vendorid),'')) docutypedesceng ,
ก็จะคล้ายๆ กับคำถามแรก คือใช้ function isnull() มาช่วยในการแสดงผลลัพธ์อีกทีครับ แต่ที่ซับซ้อนก็คือค่าที่เอามาตรวจสอบ เป็นการไป select ข้อมูลขึ้นมาใหม่ครับ แล้วก็จะเห็นว่ามีการเชื่อมต่อข้อความกันด้วยโดยใช้เครื่องหมาย +
บรรทัด 1#) แปลว่า "ถ้า เลือกข้อมูลใหม่ emcust.custname จาก table emcust โดยที่ emcust.custid = icstockdetail.custid ไม่มีค่าใดๆ (เป็น null) ให้แสดงค่าว่าง"
โดยเชื่อมต่อกับ (+' '+) เป็นการเว้นวรรค
"ถ้า เลือกข้อมูลใหม่ emvendor.vendorname จาก table emvendor โดยที่ emvendor.vendorid = icstockdetail.vendorid ไม่มีค่าใดๆ (เป็น null) ให้แสดงค่าว่าง" และผลลัพธ์จะแสดงออกมาในชื่อ column docutypedesc
ผมขออธิบายแค่บรรทัดเดียวแล้วกัน เพราะที่เหลือก็เหมือนกัน น่าจะทำความเข้าใจเองได้
Date :
2010-12-12 11:21:39
By :
salapao_codeman
หนูว่า พี่เทพกว่าโจทย์อีกนะนี่ ขอบคุณค่ะ
Date :
2010-12-13 09:51:02
By :
naked13
Load balance : Server 03