求SQL查询语句 ( 积分: 50 )

  • 主题发起人 主题发起人 hnzqw
  • 开始时间 开始时间
H

hnzqw

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个进销记录表如下:<br>ID &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;业务类型 业务日期 产品 数量<br>1. 进货 2007-01-11 A 10<br>2. 进货 2007-03-01 A 5<br>3. 进货 2007-12-01 A 3<br>4. 进货 2007-03-01 B 20<br>5. 进货 2007-12-10 B 15<br>6. 销售 2007-12-08 A 10<br>想得如下结果,SQL查询如何写?<br><br>产品 最近进货日期 最近销售日期<br>A 2007-12-01 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007-12-08<br>B 2007-12-10 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;null
 
SELECT&nbsp;产品,(SELECT&nbsp;Max(业务日期)&nbsp;FROM&nbsp;表&nbsp;WHERE&nbsp;产品=A.产品&nbsp;AND&nbsp;业务类型='进货')AS&nbsp;最近进货日期,(SELECT&nbsp;Max(业务日期)&nbsp;FROM&nbsp;表&nbsp;WHERE&nbsp;产品=A.产品&nbsp;AND&nbsp;业务类型='销售')最近销售日期&nbsp;FROM<br>(SELECT&nbsp;产品&nbsp;FROM&nbsp;表&nbsp;GROUP&nbsp;BY&nbsp;产品)as&nbsp;A
 
楼上的查询可以解决,但数据大,超时查不出结果。<br>能不能用&nbsp;case&nbsp;when作一个相同结果的查询
 
select&nbsp;产品,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Max(case&nbsp;业务类型&nbsp;when&nbsp;'进货'&nbsp;then&nbsp;业务日期&nbsp;else&nbsp;null&nbsp;end)&nbsp;最近进货日期,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Max(case&nbsp;业务类型&nbsp;when&nbsp;'销售'&nbsp;then&nbsp;业务日期&nbsp;else&nbsp;null&nbsp;end)&nbsp;最近销售日期<br>from&nbsp;进销记录表<br>group&nbsp;by&nbsp;产品<br><br>没测试过。
 
CREATE&nbsp;PROCEDURE&nbsp;pro_test<br>RETURNS<br>(<br>&nbsp;&nbsp;vtype&nbsp;varchar(1),<br>&nbsp;&nbsp;in_date&nbsp;date,<br>&nbsp;&nbsp;out_date&nbsp;date<br>)<br>AS<br>BEGIN<br>&nbsp;&nbsp;For&nbsp;select&nbsp;dictinct&nbsp;產品&nbsp;from&nbsp;表&nbsp;into&nbsp;:vtype&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;max(業務日期)&nbsp;from&nbsp;表&nbsp;where&nbsp;產品=vtype&nbsp;and&nbsp;業務類型=進貨&nbsp;into&nbsp;:in_date;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;max(業務日期)&nbsp;from&nbsp;表&nbsp;where&nbsp;產品=vtype&nbsp;and&nbsp;業務類型=銷售&nbsp;into&nbsp;:out_date;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUSPEND;<br>&nbsp;&nbsp;end;<br>END;<br><br>用存儲過程就可以了<br>select&nbsp;*&nbsp;from&nbsp;pro_test<br>我用的是interbase庫,寫法可能不一樣<br>可以修改的,忘了,發重復了。呵呵,希望能解決問題
 
CREATE&nbsp;PROCEDURE&nbsp;test<br>RETURNS<br>(<br>&nbsp;&nbsp;vtype&nbsp;varchar(1),<br>&nbsp;&nbsp;in_date&nbsp;date,<br>&nbsp;&nbsp;out_date&nbsp;date&nbsp;<br>)<br>AS<br>BEGIN<br>&nbsp;&nbsp;For&nbsp;select&nbsp;dictinct&nbsp;產品&nbsp;from&nbsp;表&nbsp;into&nbsp;:vtype&nbsp;do&nbsp;<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;max(業務日期)&nbsp;from&nbsp;表&nbsp;where&nbsp;產品=vtype&nbsp;and&nbsp;業務類型=進貨&nbsp;into&nbsp;:in_date;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;max(業務日期)&nbsp;from&nbsp;表&nbsp;where&nbsp;產品=vtype&nbsp;and&nbsp;業務類型=銷售&nbsp;into&nbsp;:out_date;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUSPEND;<br>&nbsp;&nbsp;end;<br>END;
 
同意dcx0026做法!
 

Similar threads

A
回复
0
查看
544
Andreas Hausladen
A
A
回复
0
查看
490
Andreas Hausladen
A
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部