在Sql中插入新行

编程入门 行业动态 更新时间:2024-10-10 13:14:38
本文介绍了在Sql中插入新行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

HELLO,这个查询返回2条记录(行),我只想插入2个新行(#wM)

声明@liNum十进制(19,6)声明@PrCl dec(19,6)声明@de dec(19,6)声明@cr dec(19,6) )声明@acc char(20)声明@Pracc char(20)创建表#W ( liNum dec(19,6),sname nvarchar (100),Acc char(20),M Datetime,Op dec(19,6),De dec(19,6),Cr dec(19,6),Cl dec(19,6),Ct char(50) ,GrpName nvarchar(50), CustType varchar(30),DealrName varchar(30),MrktCode varchar(30),SPO varchar(30),Tertry varchar(30),TertryMnger varchar(30),TertryZne nvarchar( 50),活动nvarchar(50), Addrs nvarchar(200),city varchar(30),CrLimit numeric(9),PayTerms varchar(30),Zne varchar(12),CustCatgry varchar(11))插入#W ( liNum,sname,Acc,M,Op,De,Cr,Cl,Ct,GrpName,C ustType,DealrName,MrktCode,SPO,Tertry,TertryMnger,TertryZne,Active,Addrs,city,CrLimit,PayTerms,Zne,CustCatgry ) SELECT t1.TransId,t1.ShortName,T1。[Account] , Convert(Datetime,t0.RefDate,103),0, T1。[Debit] De,T1。[Credit] Cr,0,d2.CardCode,d2.GroupName,d2.CustomerType, d2.DealerName,d2.MarketingCode,d2.SPO,d2.Territory,d2.TerritoryManager,d2.TerritoryZone,d2.Active, d2.Address,d2.City,d2.CreditLimit,d2.PaymentTerms,d2。区域,d2.CustomerCatergory 来自OJDT T0 INNER JOIN JDT1 T1 ON T0.TransId = T1.TransId INNER JOIN DIMBUSINESSPARTNERS D2 ON D2.CARDCODE = T1.SHORTNAME 其中d2 .CardType ='C'和t1.ShortName in('101267','107286','107755','2109294','4101340') 排序依据T1。[ShortName],T1。[RefDate],t1.TransId asc 声明$ b $的光标b从#W 中选择#w.sname,de,cr作为更新集@ PrAcc =''打开cu 从cu获取下一个到@ acc,@ de,@ cr 当@@ FETCH_STATUS = 0 开始如果@acc!= @ PrAcc set @ PrCl = 0 更新#W 设置op = @ PrCl, cl = @ PrCl- @ Cr + @ de 其中cu 的当前设置@ PrCl = @ PrCl- @ Cr + @ de set @ PrAcc = @ acc 从cu获取下一个进入@ acc,@ de,@ cr 结束 deallocate cu - 从#w 中选择#wM - 插入#W(M)值('2013-01-01')----------我想在这里插入一个新行......----------- 选择*,#w.Cl作为余额,年(#wM)AS年,转换(char(3),'2013-02-28',0)为MName,MONTH('2013-02-28' )AS月,'2013-01-01'AS FromDate,'2013-02-28'AS Todate 来自#w 内连接(选择Max(liNum)作为transid来自# W 其中#w .sname not in(从#w中选择sname,其中#wM在'2013-01-01'和'2013-02-28'之间)和#wm<'2013-01-01'分组#w.sname) #z on #z.transid =#w.liNum 其中#wM<'2013-02-28' --union - 选择*,#w.Cl作为余额,YEAR(#wM)AS年份,转换(char(3),#wm,0)为MName,MONTH(#wm)AS月,@ FrdD AS FromDate,@ Todate AS Todate - from #W --inner join - ( - 选择MAX(liNum)为rownum - 来自#w - @Fromdate和@Todate之间的#wM - 按年份分组(#wm),月份(#wM),#W.sname - )#z on#z.rownum =#w.liNum - 其中#wm之间的@wromdate和@Todate 删除表#W

解决方案

只需输入新的插入代码和其他填充允许null然后其工作,否则不会! 或 您可以在更新后更新查询,将所有字段设为空并仅提供一个值

HELLO, this query returns 2 records(rows), i just want to insert 2 new rows with respect to their months (#w.M)

declare @liNum decimal(19,6) declare @PrCl dec(19,6) declare @de dec(19,6) declare @cr dec(19,6) declare @acc char(20) declare @Pracc char(20) Create table #W ( liNum dec(19,6),sname nvarchar(100),Acc char(20), M Datetime, Op dec(19,6),De dec(19,6),Cr dec(19,6),Cl dec(19,6), Ct char(50),GrpName nvarchar(50), CustType varchar(30), DealrName varchar(30), MrktCode varchar(30), SPO varchar(30), Tertry varchar(30), TertryMnger varchar(30),TertryZne nvarchar(50), Active nvarchar(50), Addrs nvarchar(200),city varchar(30), CrLimit numeric(9), PayTerms varchar(30), Zne varchar(12),CustCatgry varchar(11) ) Insert into #W ( liNum, sname, Acc,M,Op,De,Cr,Cl ,Ct,GrpName,CustType,DealrName,MrktCode,SPO,Tertry,TertryMnger,TertryZne,Active,Addrs,city,CrLimit,PayTerms,Zne,CustCatgry ) SELECT t1.TransId, t1.ShortName , T1.[Account], Convert(Datetime,t0.RefDate,103) , 0, T1.[Debit] De ,T1.[Credit] Cr,0 ,d2.CardCode,d2.GroupName, d2.CustomerType, d2.DealerName, d2.MarketingCode, d2.SPO, d2.Territory, d2.TerritoryManager, d2.TerritoryZone, d2.Active, d2.Address, d2.City, d2.CreditLimit, d2.PaymentTerms,d2.Zone, d2.CustomerCatergory FROM OJDT T0 INNER JOIN JDT1 T1 ON T0.TransId = T1.TransId INNER JOIN DIMBUSINESSPARTNERS D2 ON D2.CARDCODE = T1.SHORTNAME where d2.CardType='C' and t1.ShortName in ('101267','107286','107755','2109294','4101340') Order By T1.[ShortName] ,T1.[RefDate],t1.TransId asc Declare cu cursor for Select #w.sname,de,cr from #W for update set @PrAcc='' Open cu Fetch next from cu into @acc,@de,@cr While @@FETCH_STATUS = 0 Begin If @acc!=@PrAcc set @PrCl=0 Update #W set op=@PrCl, cl=@PrCl-@Cr+@de where current of cu set @PrCl=@PrCl-@Cr+@de set @PrAcc=@acc Fetch next from cu into @acc,@de,@cr End deallocate cu --select #w.M from #w --insert into #W (M)values('2013-01-01')---------- I WANT TO INSERT A NEW ROW HERE...----------- select *, #w.Cl as Balance, YEAR(#w.M) AS Year , convert(char(3), '2013-02-28', 0) as MName , MONTH('2013-02-28') AS Month , '2013-01-01' AS FromDate, '2013-02-28' AS Todate from #w inner join ( select Max(liNum) as transid from #W where #w.sname not in (select sname from #w where #w.M between '2013-01-01' and '2013-02-28') and #w.m <'2013-01-01' group by #w.sname ) #z on #z.transid = #w.liNum where #w.M <'2013-02-28' --union --select *, #w.Cl as Balance, YEAR(#w.M) AS Year , convert(char(3), #w.m, 0) as MName , MONTH(#w.m) AS Month , @FromDate AS FromDate, @Todate AS Todate --from #W --inner join --( -- Select MAX(liNum) as rownum -- from #w -- where #w.M between @Fromdate and @Todate -- group by year(#w.m), month(#w.M), #W.sname --) #z on #z.rownum = #w.liNum --where #w.M between @Fromdate and @Todate Drop table #W

解决方案

just enter new insert code and other fill allow null then its works otherwise not! or you can do update query after that update that place all field null and give only one value

更多推荐

在Sql中插入新行

本文发布于:2023-10-26 18:10:14,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1530938.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Sql

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!