牵涉到两个表,这样一个SQL语句怎样写?

amfer 2003-09-01 01:32:21
SQL Server:
表1:
存货编号,其它字段
001 ,...
002 ,...
...
表2:
存货编号,仓库名,数量
001,仓库1,100
001,仓库2,200
002,仓库1,20
002,仓库2,50

我现在想用SQL语句得到这样的结果:
存货编号,...,仓库1数量,仓库2数量,总数量
001,...,100,200,300
002,...,20,50,70

这条SQL语句怎么写?
如果我这个数据库的结构不合理,那该怎么改?因为仓库名称有可能增加删改,所以不能把仓库1,仓库2固定在表1中.
...全文
31 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdhdy 2003-09-01
  • 打赏
  • 举报
回复
是记录集(select distinct Storage from stodet)的别名
amfer 2003-09-01
  • 打赏
  • 举报
回复
OK,搞定。

不知道from (select distinct Storage from stodet) a這句中最後一個'a'是啥意思?
eastpond 2003-09-01
  • 打赏
  • 举报
回复
up
pengdali 2003-09-01
  • 打赏
  • 举报
回复
select *,(select sum(数量) from 表2 where 存货编号=表1.存货编号 and 仓库名='仓库1') 仓库1数量,(select sum(数量) from 表2 where 存货编号=表1.存货编号 and 仓库名='仓库2') 仓库2数量,(select sum(数量) from 表2 where 存货编号=表1.存货编号) 总数量 from 表1

就可以了。
sdhdy 2003-09-01
  • 打赏
  • 举报
回复
declare @sql varchar(8000)
set @sql='select b.stockid'
select @sql=@sql+',sum(case c.Storage when '''+Storage+''' then Qty else 0 end) ['+Storage+'数量]'
from (select distinct Storage from stodet) a
select @sql=@sql+',sum(c.Qty) as 总数量 from Stock b left join Stodet c on b.stockid =c.stockid group by b.stockid '
--print @sql
exec(@sql)
amfer 2003-09-01
  • 打赏
  • 举报
回复
还有一点
1.查询时并不能提供“仓库名“,只能提供"Stockid".
2.表2中的Storage有可能增加,比如增加一行:
stockid Storage Qty
---------------------------
S001 坏料仓 10
amfer 2003-09-01
  • 打赏
  • 举报
回复
可能你们误会我意思了。

我其实就是要把表2中的仓库名称当成表一中的字段,把表2中和表1中相同编号的数量放在相应的仓库中。在举个例子:
表1:Stock

stockid ...
-----------------
S001 ...
S002 ...
...

表2:Stodet

stockid Storage Qty
---------------------------
S001 成品仓 100
S001 次品仓 20
S002 成品仓 200
S002 次品仓 5
...

执行SQL后:

stockid ... 成品仓数量 次品仓数量 总数量
----------------------------------------------------
S001 ... 100 20 120
S002 ... 200 5 205
...
viptiger 2003-09-01
  • 打赏
  • 举报
回复
--step1 CreateFunction
create function SumFunction(@ColValue varchar(10))
returns varchar(1000)
as
begin
declare @strSum varchar(1000)
set @strSum=''
select @strSum = convert(varchar(10),数量)+@strSum from 表2
where 存货编号 = @ColValue
return @strSum
end
--step2 Select
select 存货编号,SumFunction(存货编号),仓库数量 from 表1
txlicenhe 2003-09-01
  • 打赏
  • 举报
回复
同上。
sdhdy 2003-09-01
  • 打赏
  • 举报
回复
declare @sql varchar(8000)
set @sql='select 存货编号'
select @sql=@sql+',sum(case 仓库名 when '''+仓库名+''' then 数量 else 0 end) ['+仓库名+'数量]'
from (select distinct 仓库名 from wwww) a
select @sql=@sql+',sum(数量) as 总数量 from wwww group by 存货编号'
--print @sql
exec(@sql)
愉快的登山者 2003-09-01
  • 打赏
  • 举报
回复
declare @s varchar(3000)
set @s = 'select 表1.存货编号,表1.其它字段'
select @s = @s + ',sum(case when 表2.仓库名 ='''+ 仓库名 + ''' then 表2.数量 else 0 end) as [' +仓库名+']'
from (select distinct 仓库名 from 表2) A order by 仓库名
set @s = @s + ',sum(表2.数量) 总数量'
set @s = @s + ' from 表1 left join 表2 on 表1.存货编号 = 表2.存货编号 group by 表1.存货编号,表1.其它字段'
exec (@s)



愉快的登山者


◢◣◢◣◢◣
sdhdy 2003-09-01
  • 打赏
  • 举报
回复
declare @sql varchar(8000)
set @sql='select 存货编号'
select @sql=@sql+',sum(case 仓库名 when '''+仓库名+''' then 数量 else 0 end) ['+仓库名+'数量]'
from (select distinct 仓库名 from 表2) a
select @sql=@sql+' from 表2 group by 存货编号'
--print @sql
exec(@sql)
sdhdy 2003-09-01
  • 打赏
  • 举报
回复
declare @sql varchar(8000)
set @sql='select 存货编号'
select @sql=@sql+',sum(case 仓库名 when '''+仓库名+''' then 数量 else 0 end) ['+仓库名+'数量]'
from (select distinct 仓库名 from 表2) a
select @sql=@sql+' from 表2 group by 存货编号'
--print @sql
exec(@sql)
愉快的登山者 2003-09-01
  • 打赏
  • 举报
回复
declare @s varchar(3000)
set @s = 'select 表1.存货编号,表1.其它字段'
select @s = @s + ',sum(case when 表2.仓库名 ='''+ 仓库名 + ''' then 表2.数量 else 0 end) as [' +仓库名+']'
from (select distinct 仓库名 from 表2) A order by 仓库名
set @s = @s + ' from 表1 left join 表2 on 表1.存货编号 = 表2.存货编号 group by 表1.存货编号,表1.其它字段'
exec (@s)



愉快的登山者


◢◣◢◣◢◣
sdhdy 2003-09-01
  • 打赏
  • 举报
回复
declare @sql varchar(8000)
set @sql='select 存货编号'
select @sql=@sql+',sum(case 仓库名 when '''+仓库名+''' then 数量 else 0 end) ['+仓库名+'数量]'
from (select distinct 仓库名 from 表2) a
select @sql=@sql+' from 表2 group by 存货编号'
--print @sql
exec(@sql)
pengdali 2003-09-01
  • 打赏
  • 举报
回复
create function getstr(@content varchar(10))
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+rtrim(仓库名) from 表2 where 存货编号=@content
select @str=right(@str,len(@str)-1) where @str<>''
return @str
end
go

--调用:
select *,dbo.getstr(存货编号) 存货编号 from 表1


-------------------------------
你还是要这个?
declare @sql varchar(8000)
set @sql = 'select 存货编号'
select @sql = @sql + ',sum(case 季度 when '''+仓库名+''' then 数量 else 0 end) ['+仓库名+'数量]'
from (select distinct 仓库名 from 有一表) as a
select @sql = @sql+' from 有一表 group by 存货编号'

exec(@sql)
go
jiezhi 2003-09-01
  • 打赏
  • 举报
回复
只有兩個倉庫嗎?
select 存货编号,...,sum(b.数量) as 仓库1数量,
sum(c.数量) as 仓库2数量,sum(d.数量) as 总数量
from 表1 a left join 表2 b on a.存货编号=b.存货编号 and b.仓库名=仓库1
left join 表2 c on a.存货编号=c.存货编号 and c.仓库名=仓库2
left join 表2 d on a.存货编号=d.存货编号
资料已经上传(其他注意事项和说明参考上一篇)大小11M。注意事项:解压密码与上一篇相同(158100232832041)。内容包括:事业单位的源代码、安装程序、介绍一下修改的控件和程序所使用的一些方法.doc。说明、控件、安装程序代码在上篇,都基本相同,就不上传了。本程序机构信息不能输入数据(当时为了保证购买率),只能接受上报的内容,不影响添加数据。这个程序做的不如上一个,bug也多,只是给大家提供了一种模式化开发程序的思路,因为语句、操作、界面都与上一篇一样,只是算法和一些数据操作不同。开发程序效率第一(时间紧任务重),请大家谅解。这两个程序是应用户要求做的,用户思路是:功能越简单的程序就要做的越漂亮。可能太花哨了,仅供大家参考。这个程序作的不是太好,也有bug,没时间修改后提供给大家了,上一篇也有bug。别把这两个程序当作应用软件,只当作一篇参考文档就行了。学delphi的时间有限,加上没时间看书所以程序的还不够专业、不够标准、不够简洁,还有一些错误,大家只是参考一下就行了,我也只能算初学,如果对你有帮助,是我最高兴的。如果有时间,再发布一些以前做的许可发布的网络数据库用程序(D7,VC)。大家进步我才能进步,所以不论做什么项目在不牵涉版权、经济的前提下都会提供源代码和开发包。感谢盒子提供空间上传资料,因为很多程序源代码很短,但开发包很大,只有源代码是没有用的,感谢盒子提供了一个交流的空间。另外:上一篇的开发包里面的控件都是修改过控件里面的错误的,并汉化,并不是原版的,需要修改或重新编译源程序,就需使用这些控件。再有:这一篇和上一篇里有一个程序原文件发成旧的了,有错误,编译也搞成错的了,是处理时间输入的部分,不过不影响参考应用。安装程序里少了个文件,重新发了一下。这个程序只适应小数据量操作,如果大数据量其实只要编SQL存储过程、触发器在程序里面调用就可以了,那才是真正好的程序。谢谢盒子。songyux@yeah.net 2004.8
jquery的treeview 在显示大层次树是会卡死浏览器,我结合http://www.cnblogs.com/xuanye/archive/2009/10/26/1590250.html的改进版做的这个改进版(因为很多人没读他的源码,不知道怎么请求节点的处理页面),把asp.net的json序列化 都做了进去(Newtonsoft.jsonnet2.0.dll),,采用ajax+wrapperpage+usercontrol的模式生成json(因为牵涉公司两个配置文件,必须读配置信息连接数据库,绕了一下其实可以更轻量级的handler来处理,例子不能运行,但可以看看),同时扩展了很多的配置项都有说明,希望对大家有帮助 使用例如: <script src="lib/jquery/jquery.js" type="text/javascript"> <script src="lib/jquery/plugins/treeview/js/common.js" type="text/javascript"> <script type="text/javascript"> var checknodes = "HJH8,HJA5"; //你事先要传给树控件的 已选中节点 id $(document).ready(function() { var o = { isAsync: false, //是否异步获取节点,根据咱的要求 设为false url: "AjaxWrapperPages/AsyncGetTreeNodes.aspx", //请求节点的页面,如果没有改变文件路径 不用关心 cbiconpath: "lib/jquery/plugins/treeview/images/icons/", //同上 checkbox icon的目录位置 //icons: ["checkbox_0.gif", "checkbox_1.gif", "checkbox_2.gif"],//不用配置 emptyiconpath: "lib/jquery/plugins/treeview/images/s.gif", //checkbxo三态的图片 animate: true, //不用配置,动画没有效果 theme: "bbit-tree-lines", //bbit-tree-lines ,bbit-tree-no-lines,bbit-tree-arrows有线、没线、箭头 三个样式中选择 showcheck: true //是否显示复选框 , checkNodes: checknodes //上面 你事先要传给树控件的 已选中节点 id的变量 , rootText: "中石化单位"//根节点的文本 可为空 则没有根节点 建议起个有意义的名字描述这棵树 //,onnodeclick: function(item) { alert(item.text); } , dbconfigPath: "~/hanwayDbConfig.hwdb" //可去掉,这是我做测试用 可不用此配置 , conStr: "conStr" //连接字符串 你可直接传,考虑安全 可不用此配置 /************ 必填项 ****************/ , sqlPath: "~/Db.hwSql" //sql语句存放的文件位置 , sqlID: "dwdyinfo" //sql对应的sqlid , dtFields: "dm,zhdm,mc" //的结构 控件之关心3个:“主键id 外(父)键id 节点文本” 依次','分开 , pnodeMark: "dyzhgx" //和上面的dtFields中的外键 用来构造过滤条件 如"zhdm='dyzhgx'" 查询出所有一级节点 }; $("#tree").treeview(o); //到服务器处理选中节点 $("#showchecked").click(function(e) { var changnodes = $("#tree").getTSVs(); //得到所有选中节点的id if (changnodes != null) { changnodes = changnodes.join(","); $.ajax({ type: "get", url: "some.aspx", data: "nodes="+changnodes, success: function(msg) { alert("Data Saved: " + msg); } }); } });

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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