請教一個SQL語法的問題!! |
尚未結案
|
jch
中階會員 發表:111 回覆:224 積分:66 註冊:2003-12-01 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
hi, 請試試: where (c.i_date>a.validiay and not a.validiay<=:today) or (not c.i_date>a.validiay and a.validiay<=:today) PS. 你要的功能是不是[互斥或](xor)?? ==================================
A ⊕ B = (~A) & B A & (~B) ⊕: xor
~: not
& : and
: or
==================================
|
jch
中階會員 發表:111 回覆:224 積分:66 註冊:2003-12-01 發送簡訊給我 |
多謝兩位大哥!!以下是小弟的完整的SQL
with q11 do begin
DatabaseName := mCmp.Data;
RequestLive := False;
with SQL do begin
Clear;
Add('select a.num, a.num_date, a.cus_code, e.cus_abbr, b.item_no, f.item_desc1, b.quan, b.unit,');
Add('d.quan, a.validiay, c.i_date from sal_pric_m a');
Add('left join sal_pric_item b on a.num=b.num');
Add('left join sal_ship_item d on a.num=d.in_num and b.datetime=d.datetime');
Add('left join sal_ship_m c on c.num=d.num');
Add('left join sal_cus e on a.cus_code=e.cus_code');
Add('left join sal_item f on b.item_no=f.item_no');
Add('where (a.grp=2)');
Add('and a.status in (:status1,:status2)');
Add('and ((c.i_date>a.validiay and b.sell_qty<>0 and c.status<>:status3 and c.status<>:status4) or (a.validiay<=:today and b.sell_qty=0))');
if (B_CUS.Text <>'') and (E_CUS.Text='') then
begin
Add('and a.cus_code=:cus_code');
ParamByName('cus_code').AsString := mt11.FieldByName('cus_code').AsString;
end;
if (B_CUS.Text <>'') and (E_CUS.Text<>'') then
begin
Add('and a.cus_code between :b_cus and :e_cus');
ParamByName('b_cus').AsString := mt11.FieldByName('cus_code').AsString;
ParamByName('e_cus').AsString := mt12.FieldByName('cus_code').AsString;
end;
Add('and a.num_date between :b_date and :e_date');
Add('order by a.num');
end;
ParamByName('status1').AsString := '核准';
ParamByName('status2').AsString := '出貨';
ParamByName('status3').AsString := '登錄';
ParamByName('status4').AsString := '取消';
ParamByName('b_date').AsDateTime := B_DATE.CalendarDate;
ParamByName('e_date').AsDateTime := E_DATE.CalendarDate;
ParamByName('today').AsDateTime := Date;
Prepare;
Open; 其中sal_pric_m 為訂單的表頭資料
sal_pric_item 為訂單的表身資料
sal_ship_m 為銷貨單的表頭資料
sal_ship_item為銷貨單的表身資料
sal_item sal_cus只是參考他的客戶簡稱和產品名稱 以上是為了做訂單延遲交貨的明細表
其中c.i_date>a.validiay 表示出貨日期>預定交貨日期
又可能只有訂單沒有出貨單所以又加上a.validiay<=:today來判別預定交貨日期是否已經超過!!
但是a.validiay<=:today成立時c.i_date>a.validiay 也會成立所以查詢出來的資料卻多出一筆!!不知該如何修改程式???幫幫吧!! ========================
我是DELPHI5的初學者
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
|
jch
中階會員 發表:111 回覆:224 積分:66 註冊:2003-12-01 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |