在Sql中插入新行 [英] Inserting new Row in Sql
本文介绍了在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中插入新行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文