现有两个表,结构如下
表一
票号 总数量
ph zsl
001 100
002 200
003 200
其中ph是主键,记录唯一
表二
票号 发货量
ph fhs
001 50
001 10
002 200求一SQL语句要查询出如下结果
表三
票号 总数量 发货数 剩余数
ph zsl fhs sys
001 100 60 40
002 100 10 90
003 200 0 200
表一
票号 总数量
ph zsl
001 100
002 200
003 200
其中ph是主键,记录唯一
表二
票号 发货量
ph fhs
001 50
001 10
002 200求一SQL语句要查询出如下结果
表三
票号 总数量 发货数 剩余数
ph zsl fhs sys
001 100 60 40
002 100 10 90
003 200 0 200
解决方案 »
- 请教纵向和横向求和的问题
- 如何获得EXEC()里执行的结果
- 数据库 'SD206N_2012年新帐套1_Data' 中提取的逻辑页 (1:160) 属于对象 '0',而非对象 'sysindexes'。
- 求助:ADO连接 sql server 2005 时提示:“属性值无效。请确保输入正确的值”
- 求查询已知的一张表中某个特定值所在字段的方法 ?
- 關於sql server2008一個神奇的問題
- 我晕死了大哥们,谁来帮忙?(关于MoveFirst)
- 关于SQL 2000的安装
- 存储过程中数据类型转换的小问题,请大侠赐教
- 寻找DB2、INFORMIX FOR NT服务器软件
- 两表级联 求一SQL语句
- 我想找一些标准sql的资料,哪有呀?即标准sql都规定了什么?
select a.ph ,a.zsl,b.fhs, a.zsl-isnull(b.fhs,0) sys
from 表一 a left join (select ph,sum(fhs) fhs from 表二 group by ph ) b
on a.ph=b.ph
--生成测试数据
IF OBJECT_ID('t1') IS NOT NULL
DROP TABLE t1
GO
CREATE table t1(ph NVARCHAR(3), zsl INT)
INSERT INTO t1
SELECT '001', 100 UNION ALL
SELECT '002', 200 UNION ALL
SELECT '003', 200IF OBJECT_ID('t2') IS NOT NULL
DROP TABLE t2
GO
CREATE table t2(ph NVARCHAR(3), fhs INT)
INSERT INTO t2
SELECT '001', 50 UNION ALL
SELECT '001', 10 UNION ALL
SELECT '002', 200--你要的代码
SELECT a.ph,zsl,isnull(sum(fhs),0) fhs,isnull(zsl-sum(fhs),0) AS sys FROM t1 a left JOIN t2 b ON a.ph=b.ph GROUP BY a.ph,zsl
表三应该是
票号 总数量 发货数 剩余数
ph zsl fhs sys
001 100 60 40
002 200 200 0
003 200 0 200
这个语句就行了
select a.ph ,a.zsl,isnull(b.fhs,0), a.zsl-isnull(b.fhs,0) sys
from a left join (select ph,sum(fhs) fhs from a1 group by ph ) b
on a.ph=b.ph
谢谢大家
IF OBJECT_ID('t1') IS NOT NULL
DROP TABLE t1
GO
CREATE table t1(ph NVARCHAR(3), zsl INT)
INSERT INTO t1
SELECT '001', 100 UNION ALL
SELECT '002', 200 UNION ALL
SELECT '003', 200IF OBJECT_ID('t2') IS NOT NULL
DROP TABLE t2
GO
CREATE table t2(ph NVARCHAR(3), fhs INT)
INSERT INTO t2
SELECT '001', 50 UNION ALL
SELECT '001', 10 UNION ALL
SELECT '002', 200--SQL Version:2005 with应用
with a as (
select ph ,SUM(fhs) fhs from t2 group by ph
)select t1.ph 票号,t1.zsl 总数量,ISNULL(a.fhs,0) 发货数,ISNULL((t1.zsl-a.fhs),t1.zsl) 剩余数
from t1 left join a on t1.ph=a.ph--result:
票号 总数量 发货数 剩余数
---- ----------- ----------- -----------
001 100 60 40
002 200 200 0
003 200 0 200(3 行受影响)