要对sql查询结果进行计算,并要改变结果中的值,怎样直接利用sql查询结果而不是放到虚拟表中运算,请大家帮忙 利用数跟欠数一样吗???如果一样update tablename set 利用数=欠数 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 g90 15的产品一共有20个,目的是满足欠数,利用数是根据欠数和结存数算出的 G90 15 共有20件,根据订单欠数分摊到各订单上,101订单上G90 15 欠10,利用10个,剩下10 继续分摊到102订单上G90 15 的欠数5个上,又剩五个,依次类推 ,当剩余结存当总结存使用完之后,利用数为0,当欠数大于剩余结存数时,利用数为剩余结存数,当欠数小于剩余结存数时,利用数为订单欠数 参照一下下面的算法,更一下就可以实现你的要求了(摘自zjcxc邹建的作品中):-- 先进先出的数据冲销处理 :-- 示例数据-- CREATE TABLE 销售订单(单号 VARCHAR(10),日期 DATETIME,货品编码 VARCHAR(10),数量 INT)-- INSERT 销售订单 -- SELECT 'A1','2005-5-1','ABCD',100 UNION ALL-- SELECT 'A2','2005-5-3','ABCD',200 UNION ALL-- SELECT 'A3','2005-5-4','ABCD',300 UNION ALL-- SELECT 'A4','2005-5-8','ABCD',500-- -- CREATE TABLE 销售发货单(单号 VARCHAR(10),日期 DATETIME,货品编码 VARCHAR(10),数量 INT)-- INSERT 销售发货单-- SELECT 'B1','2005-5-05','ABCD',250 UNION ALL-- SELECT 'B2','2005-5-07','ABCD',100 UNION ALL-- SELECT 'B3','2005-5-10','ABCD',150'-- GO-- -- 问题描述:-- 对于示例数据中的销售订单和销售发货单,由于客户在做销售发货时无法指定本次是要发那一张订单的东西。-- 所以销售订单无法与销售发货单关联。客户要求以先进先出的方式统计销售订单的执行情况。对于示例数据,要求结果如下:-- 单号 日期 货品编码 订单数量 发货数量 待执行数量 -- ---------- ----------------- ------------- -------------- --------------- ------------------ ------------------------- A1 2005-05-01 ABCD 100 100 0-- A2 2005-05-03 ABCD 200 200 0-- A3 2005-05-04 ABCD 300 200 100-- A4 2005-05-08 ABCD 500 0 500-- ------------------------------------------------------------------------------------------------------------------------- 合计 1100 500 600-- -- 查询处理的过程-- SELECT A.单号,A.日期,A.货品编码, -- 订单数量=A.数量,-- 发货数量=ISNULL(CASE WHEN A.S数量<B.数量 THEN A.数量 ELSE B.数量-A.P数量 END,0),-- 待执行数量=CASE WHEN A.S数量<B.数量 THEN 0 ELSE A.S数量-ISNULL(B.数量,A.P数量) END-- INTO # FROM(-- SELECT 单号,日期=CONVERT(CHAR(10),日期,120),货品编码,-- 数量=SUM(数量),-- P数量=ISNULL((SELECT SUM(数量) FROM 销售订单-- WHERE 货品编码=A.货品编码 AND(DATEDIFF(DAY,日期,MIN(A.日期))>0 OR DATEDIFF(DAY,日期,MIN(A.日期))=0 AND 单号<A.单号)),0),-- S数量=ISNULL((SELECT SUM(数量) FROM 销售订单-- WHERE 货品编码=A.货品编码 AND(DATEDIFF(DAY,日期,MIN(A.日期))>0 OR DATEDIFF(DAY,日期,MIN(A.日期))=0 AND 单号<=A.单号)),0)-- FROM 销售订单 A-- GROUP BY 单号,CONVERT(CHAR(10),日期,120),货品编码-- )A -- LEFT JOIN(-- SELECT 货品编码,数量=SUM(数量)-- FROM 销售发货单-- GROUP BY 货品编码-- )B ON A.货品编码=B.货品编码-- AND A.P数量<B.数量-- ORDER BY A.单号,A.日期,A.货品编码-- -- SELECT * FROM #-- UNION ALL-- SELECT '','','合计',SUM(订单数量),SUM(发货数量),SUM(待执行数量) FROM #-- DROP TABLE # 谢谢 好好研究一下 如有效立即给分。另外敢问westbulls 是从哪里看到邹大的作品的 俺也想看看 如何使两台SQL服务器A与B的,相同名称,相同结构的表my_table的数据同步更新。 新手的1个简单问题 只有一列的自增列怎么添加数据 sql2000的事务回滚问题 sql中的非空判断语句 sql server管理问题 高难度问题 SQLSERVER 2005如何查看当前数据库采用的是哪种锁机制? alter 命令会有不良后果吗? 求一个统计算法问题 sqlserver2000能还原sqlserver2005备份的数据库吗? 我是机器新装的系统,怎么会提示这个错误,奇怪!!!大家进来看看
-- 先进先出的数据冲销处理 :
-- 示例数据
-- CREATE TABLE 销售订单(单号 VARCHAR(10),日期 DATETIME,货品编码 VARCHAR(10),数量 INT)
-- INSERT 销售订单
-- SELECT 'A1','2005-5-1','ABCD',100 UNION ALL
-- SELECT 'A2','2005-5-3','ABCD',200 UNION ALL
-- SELECT 'A3','2005-5-4','ABCD',300 UNION ALL
-- SELECT 'A4','2005-5-8','ABCD',500
--
-- CREATE TABLE 销售发货单(单号 VARCHAR(10),日期 DATETIME,货品编码 VARCHAR(10),数量 INT)
-- INSERT 销售发货单
-- SELECT 'B1','2005-5-05','ABCD',250 UNION ALL
-- SELECT 'B2','2005-5-07','ABCD',100 UNION ALL
-- SELECT 'B3','2005-5-10','ABCD',150'
-- GO
--
-- 问题描述:
-- 对于示例数据中的销售订单和销售发货单,由于客户在做销售发货时无法指定本次是要发那一张订单的东西。
-- 所以销售订单无法与销售发货单关联。客户要求以先进先出的方式统计销售订单的执行情况。对于示例数据,要求结果如下:
-- 单号 日期 货品编码 订单数量 发货数量 待执行数量
-- ---------- ----------------- ------------- -------------- --------------- ------------------ -----------------------
-- A1 2005-05-01 ABCD 100 100 0
-- A2 2005-05-03 ABCD 200 200 0
-- A3 2005-05-04 ABCD 300 200 100
-- A4 2005-05-08 ABCD 500 0 500
-- -----------------------------------------------------------------------------------------------------------------------
-- 合计 1100 500 600
--
-- 查询处理的过程
-- SELECT A.单号,A.日期,A.货品编码,
-- 订单数量=A.数量,
-- 发货数量=ISNULL(CASE WHEN A.S数量<B.数量 THEN A.数量 ELSE B.数量-A.P数量 END,0),
-- 待执行数量=CASE WHEN A.S数量<B.数量 THEN 0 ELSE A.S数量-ISNULL(B.数量,A.P数量) END
-- INTO # FROM(
-- SELECT 单号,日期=CONVERT(CHAR(10),日期,120),货品编码,
-- 数量=SUM(数量),
-- P数量=ISNULL((SELECT SUM(数量) FROM 销售订单
-- WHERE 货品编码=A.货品编码 AND(DATEDIFF(DAY,日期,MIN(A.日期))>0 OR DATEDIFF(DAY,日期,MIN(A.日期))=0 AND 单号<A.单号)),0),
-- S数量=ISNULL((SELECT SUM(数量) FROM 销售订单
-- WHERE 货品编码=A.货品编码 AND(DATEDIFF(DAY,日期,MIN(A.日期))>0 OR DATEDIFF(DAY,日期,MIN(A.日期))=0 AND 单号<=A.单号)),0)
-- FROM 销售订单 A
-- GROUP BY 单号,CONVERT(CHAR(10),日期,120),货品编码
-- )A
-- LEFT JOIN(
-- SELECT 货品编码,数量=SUM(数量)
-- FROM 销售发货单
-- GROUP BY 货品编码
-- )B ON A.货品编码=B.货品编码
-- AND A.P数量<B.数量
-- ORDER BY A.单号,A.日期,A.货品编码
--
-- SELECT * FROM #
-- UNION ALL
-- SELECT '','','合计',SUM(订单数量),SUM(发货数量),SUM(待执行数量) FROM #
-- DROP TABLE #