TA:
------------------------------
Goods LotNo DT Qty
M0001 L0001 1 500
M0001 L0001 2 600
M0001 L0001 4 300
M0002 L0003 1 800TB:
------------------------------
Goods LotNo Qty
M0001 L0001 700
M0002 L0003 600根据上面两个表,对TA-TB后要求得出下面的查询结果:
------------------------------
Goods LotNo DT Qty
M0001 L0001 2 400
M0001 L0001 4 300
M0002 L0003 1 200请问这个 SQL 怎么写?谢谢!
------------------------------
Goods LotNo DT Qty
M0001 L0001 1 500
M0001 L0001 2 600
M0001 L0001 4 300
M0002 L0003 1 800TB:
------------------------------
Goods LotNo Qty
M0001 L0001 700
M0002 L0003 600根据上面两个表,对TA-TB后要求得出下面的查询结果:
------------------------------
Goods LotNo DT Qty
M0001 L0001 2 400
M0001 L0001 4 300
M0002 L0003 1 200请问这个 SQL 怎么写?谢谢!
解决方案 »
- [color=#FF0000]有关SqlServer2008的授权方式[/color]
- plglenn33,什么意思啊,被封杀了,郁闷啊,我没有发广告,没有发政治信息,没有发黄色信息,没有发暴力信息,谁有这个权限封杀一个良民的号呢?
- 再问一个问题!
- 求一导入数据SQL或存储过程
- 厚着脸皮,在这里问一个在Excel里类似分组统计的问题?
- 求一sql写法
- 有人见过这种错误吗?
- Foxpro或Sql中的日期时间型如何转换为日期型?
- 从程序中返回一个表(多行),在数据库中保存,怎样实现合适呢?
- 问一个很菜,菜的不能再菜的问题!!!!
- 简单的问题,帮帮忙~
- mdx新手问题—层次结构在crossjoin函数中调用多次
--> liangCK小梁 于2008-11-07
--> 生成测试数据: @T
DECLARE @T TABLE (日期 DATETIME,金额 INT)
INSERT INTO @T
SELECT '2008-10-1',100 UNION ALL
SELECT '2008-10-5',300 UNION ALL
SELECT '2008-10-27',1200 UNION ALL
SELECT '2008-11-1',-800--SQL查询如下:DECLARE @iSum INT;SET @iSum=(SELECT SUM(金额) FROM @T)SELECT 日期,金额,
CASE WHEN px1<@iSum
THEN 金额
ELSE
CASE WHEN @iSum-px2<0
THEN 0
ELSE @iSum-px2
END
END 金额2
FROM
(
SELECT 日期,金额,
px1=(SELECT SUM(金额)
FROM @T
WHERE 日期<=t.日期),
px2=(SELECT SUM(金额)
FROM @T
WHERE 日期<t.日期)
FROM @T AS t
) AS T/*
日期 金额 金额2
----------------------- ----------- -----------
2008-10-01 00:00:00.000 100 100
2008-10-05 00:00:00.000 300 300
2008-10-27 00:00:00.000 1200 400
2008-11-01 00:00:00.000 -800 0(4 行受影响)
*/
M0001 L0001 1 500 应该是
M0001 L0001 2 500
M0001 L0001 1 500 -TB(500) ==> 0
M0001 L0001 2 600 -TB(200) ==> 400
M0001 L0001 4 300 ==> 300
M0002 L0003 1 800 -TB(600) ==> 200根据上面两个表,对TA-TB后要求得出下面的查询结果:
------------------------------
M0001 L0001 2 400
M0001 L0001 4 300
M0002 L0003 1 200