求sql写法 过滤 汇总 40czq_1314001]

发布时间:2016-12-11 18:03:15 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"求sql写法 过滤 汇总 40czq_1314001]",主要涉及到求sql写法 过滤 汇总 40czq_1314001]方面的内容,对于求sql写法 过滤 汇总 40czq_1314001]感兴趣的同学可以参考一下。

表1 表2 编号 月份 工资 编号 月份 姓名 性别 年龄 收入类别 1 201101 100 1 201101 张三 男 22 a 2 201101 200 1 201101 张三 男 22 b 3 201101 300 1 201101 张三 男 22 c 4 201101 400 2 201101 李四 男 20 a 5 201101 500 2 201101 李四 男 20 b 6 201101 600 3 201101 王五 男 19 a 3 201101 王五 男 19 b 3 201101 王五 男 19 c 4 201101 赵六 男 25 a 5 201101 陈七 男 26 a 6 201101 刘八 男 25 a 6 201101 刘八 男 25 b 6 201101 刘八 男 25 c 6 201101 刘八 男 25 d 我要的结果如下 编号 月份 姓名 性别 年龄 收入类别 工资 1 201101 张三 男 22 a 100 1 201101 张三 男 22 b 0 1 201101 张三 男 22 c 0 2 201101 李四 男 20 a 200 2 201101 李四 男 20 b 0 3 201101 王五 男 19 a 300 3 201101 王五 男 19 b 0 3 201101 王五 男 19 c 0 4 201101 赵六 男 25 a 400 5 201101 陈七 男 26 a 500 6 201101 刘八 男 25 a 600 6 201101 刘八 男 25 b 0 6 201101 刘八 男 25 c 0 6 201101 刘八 男 25 d 0 左边的是表1,右边的是表2,我想把表1的工资复制到表2中,条件是编号和月份相等, 但是只复制重复数据中的第一行,后面自动为0

表1 编号 月份 工资 1 201101 100 2 201101 200 3 201101 300 4 201101 400 5 201101 500 6 201101 600 表2 编号 月份 姓名 性别 年龄 收入类别 工资 1 201101 张三 男 22 a 1 201101 张三 男 22 b 1 201101 张三 男 22 c 2 201101 李四 男 20 a 2 201101 李四 男 20 b 3 201101 王五 男 19 a 3 201101 王五 男 19 b 3 201101 王五 男 19 c 4 201101 赵六 男 25 a 5 201101 陈七 男 26 a 6 201101 刘八 男 25 a 6 201101 刘八 男 25 b 6 201101 刘八 男 25 c 6 201101 刘八 男 25 d 要的结果如下: 编号 月份 姓名 性别 年龄 收入类别 工资 1 201101 张三 男 22 a 100 1 201101 张三 男 22 b 0 1 201101 张三 男 22 c 0 2 201101 李四 男 20 a 200 2 201101 李四 男 20 b 0 3 201101 王五 男 19 a 300 3 201101 王五 男 19 b 0 3 201101 王五 男 19 c 0 4 201101 赵六 男 25 a 400 5 201101 陈七 男 26 a 500 6 201101 刘八 男 25 a 600 6 201101 刘八 男 25 b 0 6 201101 刘八 男 25 c 0 6 201101 刘八 男 25 d 0 我想把表1的工资复制到表2中,条件是编号和月份相等, 但是只复制重复数据中的第一行,后面自动为0 

row_number()

引用 2 楼 chuanzhang5687 的回复:row_number() 支持

create table t1(编号 int,月份 varchar(6),工资 int) create table t2(编号 int,月份 varchar(6),姓名 nvarchar(10),性别 nvarchar(10),年龄 int,收入类别 nvarchar(10)) insert into t1 select 1,'201101',100  insert into t1 select 2,'201101',200  insert into t1 select 3,'201101',300  insert into t1 select 4,'201101',400  insert into t1 select 5,'201101',500  insert into t1 select 6,'201101',600  insert into t2 select 1,'201101','张三','男',22,'a' insert into t2 select 1,'201101','张三','男',22,'b' insert into t2 select 1,'201101','张三','男',22,'c' insert into t2 select 2,'201101','李四','男',20,'a' insert into t2 select 2,'201101','李四','男',20,'b' insert into t2 select 3,'201101','王五','男',19,'a' insert into t2 select 3,'201101','王五','男',19,'b' insert into t2 select 3,'201101','王五','男',19,'c' insert into t2 select 4,'201101','赵六','男',25,'a' insert into t2 select 5,'201101','陈七','男',26,'a' insert into t2 select 6,'201101','刘八','男',25,'a' insert into t2 select 6,'201101','刘八','男',25,'b' insert into t2 select 6,'201101','刘八','男',25,'c' insert into t2 select 6,'201101','刘八','男',25,'d' go select a.编号,a.月份,a.姓名,a.性别,a.年龄,a.收入类别, (case when a.收入类别='a' then b.工资 else 0 end) as 工资 from t2 a inner join t1 b on a.编号=b.编号 /* 编号          月份     姓名         性别         年龄          收入类别       工资 ----------- ------ ---------- ---------- ----------- ---------- ----------- 1           201101 张三         男          22          a          100 1           201101 张三         男          22          b          0 1           201101 张三         男          22          c          0 2           201101 李四         男          20          a          200 2           201101 李四         男          20          b          0 3           201101 王五         男          19          a          300 3           201101 王五         男          19          b          0 3           201101 王五         男          19          c          0 4           201101 赵六         男          25          a          400 5           201101 陈七         男          26          a          500 6           201101 刘八         男          25          a          600 6           201101 刘八         男          25          b          0 6           201101 刘八         男          25          c          0 6           201101 刘八         男          25          d          0 (14 行受影响) */ go drop table t1,t2

select b.编号, a.月份, b.姓名, b.性别, b.年龄,b.收入类别, a.工资 from a right join b on a.编号 = b.编号 and b.收入类别 = 'a' union all select b.编号, a.月份, b.姓名, b.性别, b.年龄,b.收入类别, 0 from a right join b on a.编号 = b.编号 and b.收入类别 <>'a' 看错了

---------------------------------------------------------------- -- Author  :fredrickhu(小F,向高手学习) -- Date    :2011-09-16 13:28:53 -- Verstion: --      Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (Intel X86)  -- Apr 22 2011 11:57:00  -- Copyright (c) Microsoft Corporation -- Enterprise Evaluation Edition on Windows NT 6.1 <X64> (Build 7600: ) (WOW64) -- ---------------------------------------------------------------- --> 测试数据:[a] if object_id('[a]') is not null drop table [a] go  create table [a]([编号] int,[月份] int,[工资] int) insert [a] select 1,201101,100 union all select 2,201101,200 union all select 3,201101,300 union all select 4,201101,400 union all select 5,201101,500 union all select 6,201101,600 --> 测试数据:[b] if object_id('[b]') is not null drop table [b] go  create table [b]([编号] int,[月份] int,[姓名] varchar(4),[性别] varchar(2),[年龄] int,[收入类别] varchar(1),[工资] int) insert [b] select 1,201101,'张三','男',22,'a',null union all select 1,201101,'张三','男',22,'b',null union all select 1,201101,'张三','男',22,'c',null union all select 2,201101,'李四','男',20,'a',null union all select 2,201101,'李四','男',20,'b',null union all select 3,201101,'王五','男',19,'a',null union all select 3,201101,'王五','男',19,'b',null union all select 3,201101,'王五','男',19,'c',null union all select 4,201101,'赵六','男',25,'a',null union all select 5,201101,'陈七','男',26,'a',null union all select 6,201101,'刘八','男',25,'a',null union all select 6,201101,'刘八','男',25,'b',null union all select 6,201101,'刘八','男',25,'c',null union all select 6,201101,'刘八','男',25,'d',null --------------开始查询-------------------------- update   b set   工资= a.工资 from   a,(select px=row_number()over(partition by 姓名 order by GETDATE()),* from b)b where   a.编号=b.编号 and   a.月份=b.月份 and   b.px=1       select * from b ----------------结果---------------------------- /* 编号          月份          姓名   性别   年龄          收入类别 工资 ----------- ----------- ---- ---- ----------- ---- ----------- 1           201101      张三   男    22          a    100 1           201101      张三   男    22          b    NULL 1           201101      张三   男    22          c    NULL 2           201101      李四   男    20          a    200 2           201101      李四   男    20          b    NULL 3           201101      王五   男    19          a    300 3           201101      王五   男    19          b    NULL 3           201101      王五   男    19          c    NULL 4           201101      赵六   男    25          a    400 5           201101      陈七   男    26          a    500 6           201101      刘八   男    25          a    600 6           201101      刘八   男    25          b    NULL 6           201101      刘八   男    25          c    NULL 6           201101      刘八   男    25          d    NULL (14 行受影响) */

select b.编号, b.月份, b.姓名, b.性别, b.年龄,b.收入类别, a.工资 from t1 a right join t2 b  on a.编号 = b.编号 and b.收入类别 = 'a'

上一篇:SQL2005报表服务中ReportServerTempDB库的表能否手动清除数据? 40分,无满意结帖,结帖人allleexp]
下一篇:关于复杂的运算过程,求教有什么方法可以实现这个过程 80qq7457322]

相关文章

相关评论