在Sql中插入新行 [英] Inserting new Row in Sql

查看:86
本文介绍了在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆