首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

自各儿实在不会写,所以还是只有麻烦各位大神了

2013-04-02 
自己实在不会写,所以还是只有麻烦各位大神了.本帖最后由 u010083176 于 2013-03-30 23:27:32 编辑A表结构:

自己实在不会写,所以还是只有麻烦各位大神了.
本帖最后由 u010083176 于 2013-03-30 23:27:32 编辑 A表结构:Number为自增长列

Number,GoodsName,Bopomofo_Ab
1       小米       XM
2       大米       DM
3       小麦       XM
4       大麦       DM
5       高梁       GL
6       土豆       TD
7       玉米       YM

B表结构:ID为自增长列,DJBID为A表Number
ID,DJBID,GoodsName,SpecType,Provider,remarks,Quantity,UnitPrice
1   1      小米      广东    阿里      良     10000      3.00
2   1      小米      山东    淘宝      优     20000      2.50
3   2      大米      山东    淘宝      良      5000      2.00
4   2      大米      吉林    阿里      良      5000      4.00
5   5      高梁      安徽    易趣      优     10000      2.00
6   4      大麦      四川    当当      差      4000      2.00
7   6      土豆      黑龙江  京东      优     20000      1.00

C表结构:ID为自增长列,DJBID为A表Numbe,KCID为B表ID
ID,DJBID,KCID,GoodsName,Provider,SpecType,remarks_kc,Quantity_ck1,UnitPrice,
1   1     2     小米      山东        淘宝      优           1000       2.50      
2   5     5     高梁      安徽        易趣      优           1000       2.00
3   1     1     小米      广东        阿里      良           1000       3.00
4   6     7     土豆      黑龙江      京东      优           1000       1.00


5   6     7     土豆      黑龙江      京东      优           1000       1.00


D表结构:ID为自增长列,DJBID为A表Numbe,KCID为B表ID
ID,DJBID,KCID,GoodsName,Provider,SpecType,remarks_kc,Quantity_ck2,UnitPrice,
1   2      3     大米      山东       淘宝      良          900        2.00
2   1      1     小米      广东       阿里      良          1000       3.00
3   5      5     高梁      安徽       易趣      优          1000       2.00
4   5      5     高梁      安徽       易趣      优          1000       2.00

E表结构:ID为自增长列,DJBID为A表Numbe,KCID为B表ID
ID,DJBID,KCID,GoodsName,Provider,SpecType,remarks_kc,Quantity_ck3,UnitPrice,
1   6     7     土豆      黑龙江      京东      优           1000       1.00
2   1     2     小米      山东        淘宝      优           1000       2.50
3   1     2     小米      山东        淘宝      优           1000       2.50
4   1     2     小米      山东        淘宝      优           1000       2.50
5   1     2     小米      山东        淘宝      优           1000       2.50
 
这是上次的查询代码:
SELECT b.*,a.Bopomofo_Ab,c.quantity_ck1,d.quantity_ck2,e.quantity_ck3 ,(B.Quantity-(ISNULL(C.quantity_ck1,0)+ISNULL(D.quantity_ck2,0)+ISNULL(E.quantity_ck3,0)) )AS outquantity_out ?FROM B left JOIN A ON a.number= b.DJBID ? LEFT JOIN C ON b.ID=c.KCID AND a.number= c.DJBID ? LEFT JOIN D ON b.ID=D.KCID AND a.number= D.DJBID ? LEFT JOIN E ON b.ID=E.KCID AND a.number= E.DJBID 


上次提问时没考虑到同表中有相同的GoodsName,SpecType,Provider,remarks这些字段应该把数量相加在一起.显示效果如下表:

B表.ID,B表.DJBID,B表.GoodsName,B表.SpecType,B表.Provider,B表.remarks,B表.Quantity,B表.UnitPrice,A表.Bopomofo_Ab,C表.quantity_ck1,D表.quantity_ck2,E表.quantity_ck3 outquantity_out
  1       1          小米           广东        阿里          良        10000         3.00           XM                1000                1000          NULL          8000
  2       1          小米           山东        淘宝          优        20000         2.50           XM                1000                NULL          4000          15000
  3       2          大米           山东        淘宝          良        5000          2.00           DM                NULL                900           NULL          4100
  4       2          大米           吉林        阿里          良        5000          4.00           DM                NULL                NULL          NULL          5000
  5       5          高梁           安徽        易趣          优        10000         2.00           GL                1000                2000          NULL          7000


  6       4          大麦           四川        当当          差        4000          2.00           XM                NULL                NULL          NULL          4000
  7       6          土豆           黑龙江      京东          优        20000         1.00           TD                2000                NULL          1000          17000


[解决办法]
貌似用你E表的数据写出来得不到你的结果,你看看是不是数据有问题,写法应该就这样:
----------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-03-31 00:36:59
-- Version:
--      Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (Intel X86) 
--Jun 17 2011 00:57:23 
--Copyright (c) Microsoft Corporation
--Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
--
----------------------------
--> 测试数据:[A]
if object_id('[A]') is not null drop table [A]
go 
create table [A]([Number] int,[GoodsName] varchar(4),[Bopomofo_Ab] varchar(2))
insert [A]
select 1,'小米','XM' union all
select 2,'大米','DM' union all
select 3,'小麦','XM' union all
select 4,'大麦','DM' union all
select 5,'高梁','GL' union all
select 6,'土豆','TD' union all
select 7,'玉米','YM'
--GoodsName,SpecType,Provider,remarks

if object_id('[B]') is not null drop table [B]
go 
create table [B]([ID] int,[DJBID] int,[GoodsName] varchar(4),[SpecType] varchar(6),[Provider] varchar(4),[remarks] varchar(2),[Quantity] int,[UnitPrice] numeric(3,2))
insert [B]
select 1,1,'小米','广东','阿里','良',10000,3.00 union all
select 2,1,'小米','山东','淘宝','优',20000,2.50 union all
select 3,2,'大米','山东','淘宝','良',5000,2.00 union all
select 4,2,'大米','吉林','阿里','良',5000,4.00 union all
select 5,5,'高梁','安徽','易趣','优',10000,2.00 union all
select 6,4,'大麦','四川','当当','差',4000,2.00 union all
select 7,6,'土豆','黑龙江','京东','优',20000,1.00

if object_id('[C]') is not null drop table [C]


go 
create table [C]([ID] int,[DJBID] int,[KCID] int,[GoodsName] varchar(4),[Provider] varchar(6),[SpecType] varchar(4),[remarks_kc] varchar(2),[Quantity_ck1] int,[UnitPrice] numeric(3,2))
insert [C]
select 1,1,2,'小米','山东','淘宝','优',1000,2.50 union all
select 2,5,5,'高梁','安徽','易趣','优',1000,2.00 union all
select 3,1,1,'小米','广东','阿里','良',1000,3.00 union all
select 4,6,7,'土豆','黑龙江','京东','优',1000,1.00 union all
select 5,6,7,'土豆','黑龙江','京东','优',1000,1.00

if object_id('[D]') is not null drop table [D]
go 
create table [D]([ID] int,[DJBID] int,[KCID] int,[GoodsName] varchar(4),[Provider] varchar(4),[SpecType] varchar(4),[remarks_kc] varchar(2),[Quantity_ck2] int,[UnitPrice] numeric(3,2))
insert [D]
select 1,2,3,'大米','山东','淘宝','良',900,2.00 union all
select 2,1,1,'小米','广东','阿里','良',1000,3.00 union all
select 3,5,5,'高梁','安徽','易趣','优',1000,2.00 union all
select 4,5,5,'高梁','安徽','易趣','优',1000,2.00

if object_id('[E]') is not null drop table [E]
go 
create table [E]([ID] int,[DJBID] int,[KCID] int,[GoodsName] varchar(4),[Provider] varchar(6),[SpecType] varchar(4),[remarks_kc] varchar(2),[Quantity_ck3] int,[UnitPrice] numeric(3,2))
insert [E]
select 1,6,7,'土豆','黑龙江','京东','优',1000,1.00 union all
select 2,1,2,'小米','山东','淘宝','优',1000,2.50 union all
select 3,1,2,'小米','山东','淘宝','优',1000,2.50 union all
select 4,1,2,'小米','山东','淘宝','优',1000,2.50 union all
select 5,1,2,'小米','山东','淘宝','优',1000,2.50


--------------开始查询--------------------------
SELECT id,djbid,goodsname,spectype,PROVIDER,remarks,SUM(quantity)quantity,unitprice,Bopomofo_Ab,quantity_ck1,quantity_ck2,quantity_ck3,SUM(outquantity_out)outquantity_out
FROM (
SELECT b.*,a.Bopomofo_Ab 
,c.quantity_ck1
,d.quantity_ck2
,e.quantity_ck3 
,(B.Quantity-(ISNULL(C.quantity_ck1,0)+ISNULL(D.quantity_ck2,0)+ISNULL(E.quantity_ck3,0)) )AS outquantity_out  
FROM B left JOIN A ON a.number= b.DJBID  
 LEFT JOIN C ON b.ID=c.KCID AND a.number= c.DJBID   
LEFT JOIN D ON b.ID=D.KCID AND a.number= D.DJBID   
LEFT JOIN E ON b.ID=E.KCID AND a.number= E.DJBID
)a
GROUP BY id,djbid,goodsname,spectype,PROVIDER,remarks,unitprice,Bopomofo_Ab,quantity_ck1,quantity_ck2,quantity_ck3
----------------结果----------------------------
/* 
id          djbid       goodsname spectype PROVIDER remarks quantity    unitprice                               Bopomofo_Ab quantity_ck1 quantity_ck2 quantity_ck3 outquantity_out
----------- ----------- --------- -------- -------- ------- ----------- --------------------------------------- ----------- ------------ ------------ ------------ ---------------
1           1           小米        广东       阿里       良       10000       3.00                                    XM          1000         1000         NULL         8000


2           1           小米        山东       淘宝       优       80000       2.50                                    XM          1000         NULL         1000         72000
3           2           大米        山东       淘宝       良       5000        2.00                                    DM          NULL         900          NULL         4100
4           2           大米        吉林       阿里       良       5000        4.00                                    DM          NULL         NULL         NULL         5000
5           5           高梁        安徽       易趣       优       20000       2.00                                    GL          1000         1000         NULL         16000
6           4           大麦        四川       当当       差       4000        2.00                                    DM          NULL         NULL         NULL         4000


7           6           土豆        黑龙江      京东       优       40000       1.00                                    TD          1000         NULL         1000         36000


*/

热点排行