这个sql怎么写呢?????????????????!!!!!!!!!!!!!!

xxsteven 2001-11-29 02:30:50
我现在有三个表,1,产品表。2,入库单。3,出库单
在1里面有产品名称,数量,型号规格,出入库情况,单据号。。。。
在2里面有仓库类别,单据号,日期。。。
在3里面有仓库类别,单据号,日期。。。
现在要求查询一个产品的在某一条件下数量的结存,
以下是在数据库里面的形式
电容 300 入库
电容 100 入库
电容 300 出库
以下是查询出来的形式
产品名称 入库数量 出库数量 结存
电容 400 300 100


要的就是上面的那个我该怎么做呀?那个设计数据库的人太癌球了,如果不行的话
请大家说明原因,我好去骂她????

...全文
1715 49 打赏 收藏 转发到动态 举报
写回复
用AI写文章
49 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccat 2001-12-10
  • 打赏
  • 举报
回复
至于这么麻烦吗?
Select sum(case 进出方式 when '入库' then 1 else 0 end) as "入库数量",
sum(case 进出方式 when '出库' then 1 else 0 end) as "出库数量",
sum(case 进出方式 when '入库' then 1 else 0 end) -
sum(case 进出方式 when '出库' then 1 else 0 end) as "结余"
from 表
这是SQL Server的写法,和DavidZ的差不多,是不是比前台写简单。
DavidZ:
好久没有人和我想到一起了。
abii 2001-12-06
  • 打赏
  • 举报
回复
这么简单的,用视图啊,
create or replace View as....
DavidZ 2001-12-04
  • 打赏
  • 举报
回复
正确的SQL语法:

数据库结构如下:

TABLE:产品进出明细表

产品名称 数量 进出方式
--------------------------------
电容 300 入库
电容 100 入库
电容 300 出库


select 产品名称,sum(case 进出方式 when '入库' THEN 数量 When '出库' THEN 0 end) as 入库数量,
sum(case 进出方式 when '入库' THEN 0 When '出库' THEN 数量 end) as 出库数量,
sum(case 进出方式 when '入库' THEN 数量 When '出库' THEN 0 - 数量 end) as 结存数
from 产品进出明细表
group by 产品名称;


(这是在IBM DB2下的SQL语法,我想其它数据库应该改动不大吧.呵呵)
lixinwyh 2001-12-04
  • 打赏
  • 举报
回复
zswang(伴水)(伤心中)的回答也没有问题吗,也不是很多吗,我也要谢谢zswang(伴水),也让我学到些东西:)看来没事还是多看看sql的帮助吧:)
chickenzzz(打呼噜的小鸡)的问题,c++Builder的控件和delphi差不多,最好不要用TADOQuery的参数,还是直接用TADOQuery.SQL.Add()的方法比较好,他的参数要规定类型,不够灵活,好像某些类型会自动加'号的
lhr03 2001-12-03
  • 打赏
  • 举报
回复
谁能用C++Builder 编写呢??我现在遇到一些问题,不知道怎么样用ADOQuery控件来编写带有参数的SQL语句来修改,删除,查询数据库!!
chickenzzz 2001-12-02
  • 打赏
  • 举报
回复
哗,重新设计过数据库吧。
王集鹄 2001-11-29
  • 打赏
  • 举报
回复
#13#10:回车换行
没有什么高不高手
仔细看书上面都有
yiyilc 2001-11-29
  • 打赏
  • 举报
回复
group by 中不能加条件吧
#13#10是回车换行了
xxsteven 2001-11-29
  • 打赏
  • 举报
回复
如果你不回答了,我还是要给你加分,你是高手,你帮了我很大的忙了,谢谢 你
xxsteven 2001-11-29
  • 打赏
  • 举报
回复
还有,#13#10是什么意识呀
麻烦你了,师傅
xxsteven 2001-11-29
  • 打赏
  • 举报
回复
你还是厉害,但我问的是那句话
Query1.SQL.Add('GROUP BY 产品名称,型号规格,仓库类别=''原料库''');
那个原料库有问题
王集鹄 2001-11-29
  • 打赏
  • 举报
回复
别人也可以帮你的
game over
qiubolecn 2001-11-29
  • 打赏
  • 举报
回复
真是搞不懂

区区一条case when就能解决的问题,竟然写了一大堆
王集鹄 2001-11-29
  • 打赏
  • 举报
回复
玩Delphi三年了
在做进销存软件
经验技术的提高
不就是多多实践

var
S: string;
begin
Query1.Close;
Query1.SQL.Text :=
'SELECT 产品名称,型号规格,仓库类别,SUM(数量*CHARINDEX(''入库'', 出入库情况)) AS 入库数量,'#13#10 +
' SUM(数量*CHARINDEX(''出库'', 出入库情况)) AS 出库数量,'#13#10 +
' SUM(数量*CHARINDEX(''入库'', 出入库情况)) - SUM(数量*CHARINDEX(''出库'', 出入库情况)) AS 结存'#13#10 +
'FROM 产品'#13#10;
S := '';
if ComboBox1.Text<>'' then
S := 'WHERE 产品名称='''+ComboBox1.Text+'''';
if ComboBox2.Text<>'' then
if S <> '' then
S := S + ' AND 型号规格='''+ComboBox2.Text+''''
else S := 'WHERE 型号规格='''+ComboBox2.Text+'''';
if S <> then Query1.SQL.Add(S);
Query1.SQL.Add('GROUP BY 产品名称,型号规格,仓库类别');
try
Query1.Open;
ShowMessage('欢迎使用,一共查询到的记录数是:'+IntToStr(Query1.RecordCount));
except
{}
end;
end;
xxsteven 2001-11-29
  • 打赏
  • 举报
回复
呵呵,帮人到底三,
Query1.SQL.Add('GROUP BY 产品名称,型号规格,仓库类别=''原料库''');
怎么错了呀
我要问?????
xxsteven 2001-11-29
  • 打赏
  • 举报
回复
我对你的感谢,不能用加分来表达,你学delphi多久了呀?
现在在做什么呢?
王集鹄 2001-11-29
  • 打赏
  • 举报
回复
zswang(伴水)(伤心中) (2001-11-29 14:47:24)
to
zswang(伴水)(伤心中) (2001-11-29 16:03:27)
王集鹄 2001-11-29
  • 打赏
  • 举报
回复
不答了,否则你的程序就是我编在呀
嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻
嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻
嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻
嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻
嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻
王集鹄 2001-11-29
  • 打赏
  • 举报
回复
//最后一次
begin
Query1.Close;
Query1.SQL.Text :=
'SELECT 产品名称,型号规格,仓库类别,SUM(数量*CHARINDEX(''入库'', 出入库情况)) AS 入库数量,'#13#10 +
' SUM(数量*CHARINDEX(''出库'', 出入库情况)) AS 出库数量,'#13#10 +
' SUM(数量*CHARINDEX(''入库'', 出入库情况)) - SUM(数量*CHARINDEX(''出库'', 出入库情况)) AS 结存'#13#10 +
'FROM 产品'#13#10 +
'WHERE'#13#10;
if ComboBox1.Text<>'' then
Query1.SQL.Add('产品名称='''+ComboBox1.Text+'''');
if ComboBox2.Text<>'' then
Query1.SQL.Add('AND 型号规格='''+ComboBox2.Text+'''');
Query1.SQL.Add('GROUP BY 产品名称,型号规格,仓库类别');
try
Query1.Open;
ShowMessage('欢迎使用,一共查询到的记录数是:'+IntToStr(Query1.RecordCount));
except
{}
end;
end;
xxsteven 2001-11-29
  • 打赏
  • 举报
回复
begin
Query1.Close;
Query1.SQL.Text :=
'SELECT 产品名称,型号规格,仓库类别,SUM(数量*CHARINDEX(''入库'', 出入库情况)) AS 入库数量,'#13#10 +
' SUM(数量*CHARINDEX(''出库'', 出入库情况)) AS 出库数量,'#13#10 +
' SUM(数量*CHARINDEX(''入库'', 出入库情况)) - SUM(数量*CHARINDEX(''出库'', 出入库情况)) AS 结存'#13#10 +
'FROM 产品'#13#10 +
'GROUP BY 产品名称,型号规格,仓库类别'#13#10;
try
if ComboBox1.Text<>'' then
Query1.Sql.Add('And 入库单表.产品名称='''+ComboBox1.Text+'''');
if ComboBox2.Text<>'' then
Query1.Sql.Add('And 入库单表.型号规格='''+ComboBox2.Text+'''');
Query1.Open;
ShowMessage('欢迎使用,一共查询到的记录数是:'+IntToStr(Query1.RecordCount));
except
{}
end;
end;
当我输入产品名称是,他说我在and附近有语法错误,为什么??帮帮弱者
加载更多回复(29)

5,930

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧