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

有关问题感觉很难,

2012-10-13 
问题感觉很难,高手请进!!SQL codeSELECTMOCTA.TA001+-+MOCTA.TA002 单别/单号,MOCTA.TA006 品号,MOCTA

问题感觉很难,高手请进!!

SQL code
SELECTMOCTA.TA001+'-'+MOCTA.TA002 '单别/单号',MOCTA.TA006 品号,MOCTA.TA034 品名,MOCTA.TA035 规格,MOCTA.TA015 预计产量,ISNULL((SELECT CONVERT(varchar(100),CAST(MOCTC.TC003 AS datetime),23) FROM MOCTC WHERE MOCTC.TC001=MOCTE.TE001 AND MOCTC.TC002=MOCTE.TE002),'') 发外日期,ISNULL((CAST(MOCTE.TE005 as VARCHAR(50))),'') 发外数量,ISNULL((CAST(MOCTI.TI007 as VARCHAR(50))),'') 进货数量FROM MOCTALEFT JOIN MOCTE ON MOCTE.TE011=MOCTA.TA001 AND MOCTE.TE012=MOCTA.TA002 AND MOCTE.TE019='Y'LEFT JOIN MOCTI ON MOCTI.TI013=MOCTA.TA001 AND MOCTI.TI014=MOCTA.TA002 AND MOCTI.TI037='Y'WHERE MOCTA.TA013='Y' AND MOCTA.TA001 IN('513','522') AND MOCTA.TA002='120900527'ORDER BY MOCTA.TA001+MOCTA.TA002 asc


结果:

单别/单号 品号 品名 规格 预计产量 发外日期 发外数量 进货数量
----------------------------------------------------------------
513-120900527 A01 desk 200*100*20 100 2012-09-13 30 35
513-120900527 A01 desk 200*100*20 100 2012-09-15 50 35
513-120900527 A01 desk 200*100*20 100 2012-09-18 20 35

从结果中可以看出有一张单分3次发外加工,日期为9.13发了30PCS、 9.15发了50PCS、 9.18发了20PCS;在9月19日有一批进货数量为35PCS。
现在我想让进货数量显示为以下效果:


单别/单号 品号 品名 规格 预计产量 发外日期 发外数量 进货数量
----------------------------------------------------------------
513-120900527 A01 desk 200*100*20 100 2012-09-13 30 30
513-120900527 A01 desk 200*100*20 100 2012-09-15 50 5
513-120900527 A01 desk 200*100*20 100 2012-09-18 20 0

请教各位高手,不知有什么办法可以实现?

[解决办法]
SQL code
--构建测试数据create table MOCTA(TA001 varchar(10),TA002 varchar(10),TA006 varchar(10),TA034 varchar(10),TA035 varchar(10),TA015 int,TA013  varchar(10))insert into MOCTA select '513','120900527','A01','desk','200*100*20',100,'Y'create table MOCTC(TC002 int,TC003 varchar(20),TC001 int )insert into MOCTC select 1,'2012-09-13',1union select 2,'2012-09-15',2union select 3,'2012-09-18',3create table MOCTE(TE011 varchar(10),TE012 varchar(10),TE005 int,TE019  varchar(10),TE001 int,TE002 int)insert into MOCTE select '513','120900527',30,'Y',1,1union select '513','120900527',50,'Y',2,2union select '513','120900527',20,'Y',3,3create table MOCTI(TI013 varchar(10),TI014 varchar(10),TI007 int,TI037  varchar(10))insert into MOCTI select '513','120900527',35,'Y'--解决方案;with CET1 as(SELECTa.TA001+'-'+a.TA002 [单别/单号],a.TA006 品号,a.TA034 品名,a.TA035 规格,a.TA015 预计产量,ISNULL(CONVERT(varchar(100),CAST(d.TC003 AS datetime),23),'') 发外日期,ISNULL(b.TE005 ,0) 发外数量,ISNULL(c.TI007 ,0) 进货数量FROM MOCTA aLEFT JOIN MOCTE b ON b.TE011=a.TA001 AND b.TE012=a.TA002 AND b.TE019='Y'LEFT JOIN MOCTI c ON c.TI013=a.TA001 AND c.TI014=a.TA002 AND c.TI037='Y'left join MOCTC d on d.TC001=b.TE001 AND d.TC002=b.TE002WHERE a.TA013='Y' AND a.TA001 IN('513','522') AND a.TA002='120900527'--ORDER BY a.TA001+a.TA002,发外日期 asc)select [单别/单号],品号,品名,规格,预计产量,发外日期,发外数量,case when 进货数量 > 发外数量sum  then 发外数量                     else case when 进货数量 > 发外数量sum - 发外数量 then  进货数量 - 发外数量sum + 发外数量                                                                else 0 end                     end 进货数量from CET1 a cross apply (select sum(发外数量) 发外数量sum from CET1 b where a.[单别/单号]= b.[单别/单号] and a.品号 = b.品号 and b.发外日期 <= a.发外日期)bORDER BY [单别/单号],发外日期/*单别/单号             品号       品名       规格       预计产量    发外日期            发外数量    进货数量--------------------- ---------- ---------- ---------- ----------- --------------------------------------------513-120900527         A01        desk       200*100*20 100         2012-09-13          30          30513-120900527         A01        desk       200*100*20 100         2012-09-15          50          5513-120900527         A01        desk       200*100*20 100         2012-09-18          20          0(3 行受影响)*/ 

热点排行