关于隔行SQL查询的问题

彖爻之辞 2008-10-19 10:38:20
有下面一个入库出库汇总表

库存日期 本期入库 本期出库
2008-09-04 25000.00 18350.00
2008-09-05 68264.00 32080.00
2008-09-07 47767.00 17666.00
2008-09-08 49509.70 20129.00
2008-09-09 14849.00 10226.00
2008-09-11 25364.00 21125.00

如何通过SQL语句的方法获得下面的表,注意日期并不一定连续

库存日期 上期数量 本期入库 本期出库 本期结存
2008-09-04 0 25000 18350 6650
2008-09-05 6650 68264 32080 42834
2008-09-07 42834 47767 17666 72935
2008-09-08 72935 49509.7 20129 102315.7
2008-09-09 102315.7 14849 10226 106938.7
2008-09-11 106938.7 25364 21125 111177.7
...全文
281 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
百年树人 2008-10-19
  • 打赏
  • 举报
回复
路过
水族杰纶 2008-10-19
  • 打赏
  • 举报
回复
if object_id('tempdb..#')is not null drop table #
create table #(库存日期 datetime, 本期入库 float, 本期出库 float)
insert # select '2008-09-04', 25000.00, 18350.00
insert # select '2008-09-05', 68264.00, 32080.00
insert # select '2008-09-07', 47767.00, 17666.00
insert # select '2008-09-08', 49509.70, 20129.00
insert # select '2008-09-09', 14849.00, 10226.00
insert # select '2008-09-11', 25364.00, 21125.00
SELECT
库存日期,
上期数量 = isnull((select sum (本期入库 - 本期出库) from # where 库存日期< a.库存日期 ),0),
本期入库,
本期出库,
本期结存 = isnull((select sum (本期入库 - 本期出库) from # where 库存日期< a.库存日期 ),0)+本期入库 - 本期出库
from # a
-狙击手- 2008-10-19
  • 打赏
  • 举报
回复
------------------------------------
-- Author: happyflsytone
-- Date:2008-10-19 10:44:57
------------------------------------

-- Test Data: ta
IF OBJECT_ID('ta') IS NOT NULL
DROP TABLE ta
Go
CREATE TABLE ta(库存日期 SMALLDATETIME,本期入库 NUMERIC(7,2),本期出库 NUMERIC(7,2))
Go
INSERT INTO ta
SELECT '2008-09-04',25000.00,18350.00 UNION ALL
SELECT '2008-09-05',68264.00,32080.00 UNION ALL
SELECT '2008-09-07',47767.00,17666.00 UNION ALL
SELECT '2008-09-08',49509.70,20129.00 UNION ALL
SELECT '2008-09-09',14849.00,10226.00 UNION ALL
SELECT '2008-09-11',25364.00,21125.00
GO
--Start
SELECT
库存日期,
上期数量 = isnull((select sum (本期入库 - 本期出库) from ta where 库存日期< a.库存日期 ),0),
本期入库,
本期出库,
本期结存 = isnull((select sum (本期入库 - 本期出库) from ta where 库存日期< a.库存日期 ),0)+本期入库 - 本期出库
from ta a

--Result:
/*

库存日期 上期数量 本期入库 本期出库 本期结存
----------------------- --------------------------------------- --------------------------------------- --------------------------------------- ---------------------------------------
2008-09-04 00:00:00 0.00 25000.00 18350.00 6650.00
2008-09-05 00:00:00 6650.00 68264.00 32080.00 42834.00
2008-09-07 00:00:00 42834.00 47767.00 17666.00 72935.00
2008-09-08 00:00:00 72935.00 49509.70 20129.00 102315.70
2008-09-09 00:00:00 102315.70 14849.00 10226.00 106938.70
2008-09-11 00:00:00 106938.70 25364.00 21125.00 111177.70

*/
--End
113244 2008-10-19
  • 打赏
  • 举报
回复
mark
Andy-W 2008-10-19
  • 打赏
  • 举报
回复
Select a.[库存日期],a.[本期入库],a.[本期出库],Sum(b.[本期入库])-Sum(b.[本期出库]) As [本期结存]
From @1 a
Inner Join @1 b On b.[库存日期]<=a.[库存日期]
Group By a.[库存日期],a.[本期入库],a.[本期出库]


使用Inner Join也可以,因为On后面使用的是b.[库存日期]<=a.[库存日期]
Andy-W 2008-10-19
  • 打赏
  • 举报
回复
Use Test
Go
--> --> (Andy)生成测试数据 2008-10-19
Set Nocount On
declare @1 table([库存日期] Datetime,[本期入库] decimal(18,2),[本期出库] decimal(18,2))
Insert @1
select '2008-09-04',25000.00,18350.00 union all
select '2008-09-05',68264.00,32080.00 union all
select '2008-09-07',47767.00,17666.00 union all
select '2008-09-08',49509.70,20129.00 union all
select '2008-09-09',14849.00,10226.00 union all
select '2008-09-11',25364.00,21125.00

Select a.[库存日期],a.[本期入库],a.[本期出库],Sum(b.[本期入库])-Sum(b.[本期出库]) As [本期结存]
From @1 a
Left Outer Join @1 b On b.[库存日期]<=a.[库存日期]
Group By a.[库存日期],a.[本期入库],a.[本期出库]

/*
库存日期 本期入库 本期出库 本期结存
----------------------- ---------------------------------------
2008-09-04 00:00:00.000 25000.00 18350.00 6650.00
2008-09-05 00:00:00.000 68264.00 32080.00 42834.00
2008-09-07 00:00:00.000 47767.00 17666.00 72935.00
2008-09-08 00:00:00.000 49509.70 20129.00 102315.70
2008-09-09 00:00:00.000 14849.00 10226.00 106938.70
2008-09-11 00:00:00.000 25364.00 21125.00 111177.70
*/


liangCK 2008-10-19
  • 打赏
  • 举报
回复
--> liangCK小梁 于2008-10-19
--> 生成测试数据: #T
IF OBJECT_ID('tempdb.dbo.#T') IS NOT NULL DROP TABLE #T
CREATE TABLE #T (库存日期 DATETIME,本期入库 NUMERIC(7,2),本期出库 NUMERIC(7,2))
INSERT INTO #T
SELECT '2008-09-04',25000.00,18350.00 UNION ALL
SELECT '2008-09-05',68264.00,32080.00 UNION ALL
SELECT '2008-09-07',47767.00,17666.00 UNION ALL
SELECT '2008-09-08',49509.70,20129.00 UNION ALL
SELECT '2008-09-09',14849.00,10226.00 UNION ALL
SELECT '2008-09-11',25364.00,21125.00

--SQL查询如下:

SELECT CONVERT(VARCHAR(10),a.库存日期,120) AS 库存日期,
ISNULL(b.上期数量,0) AS 上期数量,
a.本期入库,a.本期出库,
本期结存=ISNULL(b.上期数量,0)+a.本期入库-a.本期出库
FROM #T AS a
CROSS APPLY
(
SELECT SUM(本期入库-本期出库) AS 上期数量
FROM #T
WHERE 库存日期<a.库存日期
) AS b

/*
库存日期 上期数量 本期入库 本期出库 本期结存
---------- --------------------------------------- --------------------------------------- --------------------------------------- ---------------------------------------
2008-09-04 0.00 25000.00 18350.00 6650.00
2008-09-05 6650.00 68264.00 32080.00 42834.00
2008-09-07 42834.00 47767.00 17666.00 72935.00
2008-09-08 72935.00 49509.70 20129.00 102315.70
2008-09-09 102315.70 14849.00 10226.00 106938.70
2008-09-11 106938.70 25364.00 21125.00 111177.70

(6 行受影响)

*/
彖爻之辞 2008-10-19
  • 打赏
  • 举报
回复
OK!感谢各位!
无枪狙击手的答案被最终接受
huch_2008 2008-10-19
  • 打赏
  • 举报
回复
declare @laststore as numeric, @instore as numeric, @outstore as numeric, @store as numeric
declare @date1 datetime

set @store=0

declare rs_cursor cursor for select [date], [instroe], [outstroe] from stroe

open rs_cursor

print '库存日期 ' + char(9) + '上期数量 ' + char(9) + '本期入库 ' + char(9) + '本期出库 ' + char(9) + '本期结存'

FETCH NEXT FROM rs_cursor into @date1, @instore, @outstore

while @@FETCH_STATUS=0

begin
set @laststore=@store
set @store = @instore - @outstore+@laststore

print cast(@date1 as nvarchar) + char(9) + cast(@laststore as nvarchar)+ char(9) + cast(@instore as nvarchar)+ char(9) + cast(@outstore as nvarchar)+ char(9) + cast(@store as nvarchar)
FETCH NEXT FROM rs_cursor into @date1, @instore, @outstore
end

CLOSE rs_cursor
DEALLOCATE rs_cursor
xj116 2008-10-19
  • 打赏
  • 举报
回复
请问:where 库存日期< a.库存日期 是什么意思啊?

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧