各位大佬,帮忙看看这个题吧,我快崩溃了
sql吧
全部回复
仅看楼主
level 1
syea凡ლ 楼主
各位大佬,帮忙看看这个题吧,我快崩溃了
2021年07月15日 02点07分 1
level 1
syea凡ლ 楼主
图三,是参考结果,用sql语句写出来运行结果和这个一致
2021年07月15日 02点07分 2
level 8
又是这个平仓题,我记得之前发过几次的。
2021年07月15日 02点07分 4
level 8
begin
DECLARE
@MATNR varchar(50)
,@YEAR_MONTH int
,@received int
,@returned int
,@fkje int
,@ID int
CREATE TABLE #temp(
[ID] [INT] NULL,
[MAT] [nvarchar](50) NULL,
[YEARMONTH] [int] NULL,
[RECEIVED] [int] NULL,
[RETURNED] [int] NULL,
[FKJE] [int] NULL
)
DECLARE CURSOR1 CURSOR FOR
SELECT YEAR_MONTH , MATNR , RECEIVED,RETURNED
FROM [dbo].[TRAIN_MATERIAL_PURCHASE]
order by MATNR ,YEAR_MONTH
set @ID=1
set @FKJE=0
open CURSOR1
FETCH next from CURSOR1 into @YEAR_MONTH,@MATNR,@RECEIVED,@RETURNED
WHILE @@FETCH_STATUS =0
begin
if (@FKJE>=0 )
begin
set @FKJE =@RECEIVED-@RETURNED
end
else if (@FKJE<0 )
begin
set @FKJE =@RECEIVED -@RETURNED+@FKJE
end
insert into #temp( [ID] , [MAT] , [YEARMONTH] , [RECEIVED] , [RETURNED] , [FKJE] )
values(@ID,@MATNR,@YEAR_MONTH,@RECEIVED,@RETURNED,@FKJE)
set @ID=@ID+1
FETCH next from CURSOR1 into @YEAR_MONTH,@MATNR,@RECEIVED,@RETURNED
end
CLOSE CURSOR1
DEALLOCATE CURSOR1
select * from #temp
end
2021年07月15日 03点07分 5
其实用子查询也行,不过这样会导致5层嵌套,可读性很差如果有兴趣我再写一个吧
2021年07月15日 03点07分
@咸鱼初号机💤 如果可以的话,也拜托老哥再写一下吧,我多学学前辈的方法
2021年07月15日 05点07分
@syea凡ლ 好的,我写一下,你私信设置不接收消息,我回复不了
2021年07月15日 05点07分
@咸鱼初号机💤 好的,我设置改一下
2021年07月15日 05点07分
level 8
SELECT MATNR ,YEAR_MONTH , RECEIVED,RETURNED ,RECEIVED-RETURNED FKJE
into #temp1
FROM [dbo].[TRAIN_MATERIAL_PURCHASE] a
select MATNR ,YEAR_MONTH , RECEIVED,RETURNED
,case
when (select count(1) from [TRAIN_MATERIAL_PURCHASE] where MATNR=a.MATNR and YEAR_MONTH<a.YEAR_MONTH)=0 then RECEIVED-RETURNED
when (select top 1 FKJE from #temp1 where MATNR=a.MATNR and YEAR_MONTH<a.YEAR_MONTH order by YEAR_MONTH desc) >=0 then RECEIVED-RETURNED
else RECEIVED-RETURNED+(select top 1 FKJE from #temp1 where MATNR=a.MATNR and YEAR_MONTH<a.YEAR_MONTH order by YEAR_MONTH desc) end FKJE
into #temp2
from #temp1 a
select MATNR ,YEAR_MONTH , RECEIVED,RETURNED
,case
when (select count(1) from [TRAIN_MATERIAL_PURCHASE] where MATNR=a.MATNR and YEAR_MONTH<a.YEAR_MONTH)=0 then RECEIVED-RETURNED
when (select top 1 FKJE from #temp2 where MATNR=a.MATNR and YEAR_MONTH<a.YEAR_MONTH order by YEAR_MONTH desc) >=0 then RECEIVED-RETURNED
else RECEIVED-RETURNED+(select top 1 FKJE from #temp2 where MATNR=a.MATNR and YEAR_MONTH<a.YEAR_MONTH order by YEAR_MONTH desc) end FKJE
into #temp3
from #temp2 a
select row_number() over( order by MATNR ,YEAR_MONTH) ID, * from #temp3
2021年07月15日 05点07分 6
这种好像洗地一样的方法,通常是写一个动态sql不断更新临时表名称洗30次就行了,你的数据洗3次就OK
2021年07月15日 05点07分
哥,我在hana studio里咋运行不了啊,form后边的表的出处我改了的,还是不知道那有问题
2021年07月15日 06点07分
@咸鱼初号机💤 hana studio不太清楚,建议先确保能运行出数据再改。我用的T-SQL语法,如果你不是sql server责可能存在语法错误。或者hana studio不支持这样的sql写法,那你就必须把sql变成存储过程了
2021年07月15日 06点07分
好的,你这个能运行出来么
2021年07月15日 06点07分
1