问题1
A表
油品名称 日期 期末库存
油a 2006.2.2 100
油a 2006.2.3 150
油b 2006.2.6 80
油b 2006.2.7 130B表
油品名称 日期 油量
油a 2006.1.2 50
油a 2006.1.8 80
油b 2006.1.6 60
油b 2006.1.26 70得到结果 a表加上前日库存油品名称 日期 前日库存 期末库存
油a 2006.2.2 80 100
油a 2006.2.3 100 150
油b 2006.2.6 70 70
油b 2006.2.7 80 130
前日库存如果不是第一天的就等于前日期末库存
是第一天的就到b表里找最近日期的油量就是。
问题2 sqlserver里面的这样的语句oracle里面怎么写,后面部分
Create Table A(ID Int,Name Varchar(10))
Insert A Select 1,'AA'
Union All Select 2,'BB'
Union All Select 3,'CC'
GODeclare @S Varchar(1000)
Select @S=''
Select @S=@S+Name From A
Select @S
GO
Drop Table A
A表
油品名称 日期 期末库存
油a 2006.2.2 100
油a 2006.2.3 150
油b 2006.2.6 80
油b 2006.2.7 130B表
油品名称 日期 油量
油a 2006.1.2 50
油a 2006.1.8 80
油b 2006.1.6 60
油b 2006.1.26 70得到结果 a表加上前日库存油品名称 日期 前日库存 期末库存
油a 2006.2.2 80 100
油a 2006.2.3 100 150
油b 2006.2.6 70 70
油b 2006.2.7 80 130
前日库存如果不是第一天的就等于前日期末库存
是第一天的就到b表里找最近日期的油量就是。
问题2 sqlserver里面的这样的语句oracle里面怎么写,后面部分
Create Table A(ID Int,Name Varchar(10))
Insert A Select 1,'AA'
Union All Select 2,'BB'
Union All Select 3,'CC'
GODeclare @S Varchar(1000)
Select @S=''
Select @S=@S+Name From A
Select @S
GO
Drop Table A
第二个问题
Create Table A(ID Int,Name Varchar(10));
Insert into A Select (1,'AA');
Insert into A Select (2,'BB');
Insert into A Select (3,'CC');S Varchar2(1000);
S :='';
S :=S || (select Name From A)Drop Table A
Select :S=''
Select :S=:S+Name From A
Select :S
GO
Drop Table A
问题2Declare S Varchar(1000)
Select S := ''
Select S=S+Name From A
Select S
GO
Drop Table A
---------- ---------- ----------
油a 2006.2.2 100
油a 2006.2.3 150
油b 2006.2.6 80
油b 2006.2.7 130SQL> select * from b;油品名称 日期 油量
---------- ---------- ----------
油a 2006.1.2 50
油a 2006.1.8 80
油b 2006.1.6 60
油b 2006.1.26 70SQL> With ttt As (Select 油品名称,日期,期末库存,row_number() over (Partition By
油品名称 Order By 日期) rid From
2 (
3 Select 油品名称,to_date(日期,'yyyy.mm.dd') 日期,期末库存 From a
4 Union
5 Select 油品名称,to_date(日期,'yyyy.mm.dd') 日期,油量 期末库存 From b) )
6 Select a.油品名称,a.日期,(Select 期末库存 From ttt b Where b.油品名称=c.油
品名称 And b.rid=c.rid-1) 前日库存,a.期末库存 From ttt c,a
7 Where a.油品名称=c.油品名称 And to_date(a.日期,'yyyy.mm.dd')=c.日期;油品名称 日期 前日库存 期末库存
---------- ---------- ---------- ----------
油a 2006.2.2 80 100
油a 2006.2.3 100 150
油b 2006.2.6 70 80
油b 2006.2.7 80 130SQL> select * from ta;油品名称 日期 期末库存 罐号
---------- ---------- ---------- ----------
油a 2006.2.2 100 m25
油a 2006.2.2 150 n23
油b 2006.2.6 80 k23
油b 2006.2.6 130 t58
油b 2006.2.6 90 f823
油b 2006.2.7 130 fh88已选择6行。SQL> Select 油品名称, 日期, Sum(期末库存) 期末库存,
2 Substr((Select Max(Sys_Connect_By_Path(罐号, '/'))
3 From (Select Row_Number
() Over(Partition By 油品名称, 日期 Order By 油品名称, 日期) Rid,
4
Row_Number() Over(Partition By 油品名称, 日期 O
rder By 油品名称, 日期) + 1 Pid, Ta.*
5
From (Select * From Ta Order By 油品名称, 日期, 罐号) Ta) b
6 Where b.油品名称 = a.油
品名称 And b.日期 = a.日期
7 Start With Rid = 1
8 Connect By Prior Pid =
Rid), 2) 罐号
9 From Ta a
10 Group By 油品名称, 日期;油品名称 日期 期末库存
---------- ---------- ----------
罐号
--------------------------------------------------------------------------------油a 2006.2.2 250
m25/n23油b 2006.2.7 130
fh88油b 2006.2.6 300
m25/n23/t58