高难度的数据筛选,需要插入到两个表去的

aauu_1980 2012-10-27 04:38:09
论坛上面的各位大虾,小弟的数据如下,诚心求教,谢谢了!!!!


1、“A表”数据如下:
khqq khnc khz khyf
45331 澔a NULL 400
45331 澔b 1000
4720 灵a NULL 400
4720 灵b 150
4966 慧澄僧 50
5041 嘎 林组 400
5760 孤坟野 慧新 500
806790 (_舞自飛 韩导组 650
8729 ?心`~ 飞 100
8729 `?心~ 飞 250
123456 其 飞 250
9425 伟 700


2、现需要将A表的数据分别筛选出来,插入到B表和C表,其中A表,B表和C表的结构是一样的

B表最终想要的结果
1、筛选的思路,先判断A表里的每条记录的Khz是否为空,如果isnull(khz,'')='' 就将该记录放在C表里面)
2、然后将剩余的记录,以khqq做为条件,只要记录的khqq相同,就将这些记录的khyf进行累加,然后khnc就取这些记录里面的其中一条就可以了,最终结果如下:

khqq khnc khz khyf
45331 澔a NULL 1400 (该记录实际上是两条记录累加得来的)
4720 灵a NULL 550 (该记录实际上是两条记录累加得来的)
4966 慧澄僧 50
9425 伟 700


C表最终想要的结果
筛选思路,经过前面步取的筛选,这个时候C表记录里面的客户组都不为空,然后将khz相同的记录进行累加,然后合并。Sum(khyf)

khz khyf
林组 400
慧新 500
韩导组 650
飞 600 (该记录实际上是三条记录累加而得来看)
...全文
154 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2012-10-28
  • 打赏
  • 举报
回复
其实你思路都有了,实现不会难啊?在一个sql批里面,不用if/else了,直接先处理B表,然后再处理C表....我想不到有什么难度让你实现不了
ChangeMyself2012 2012-10-28
  • 打赏
  • 举报
回复
说实话题目还是木有太完全看懂,不知道群主要的是这样的结果么:

if OBJECT_ID('A') is not null drop table A
create table A(khqq nvarchar(20),khnc nvarchar(20),khz nvarchar(20),khyf int)
if OBJECT_ID('B') is not null drop table B
select * into B from A where 1<>1
if OBJECT_ID('C') is not null drop table C
select * into C from A where 1<>1

insert into A
select '45331','澔a',NULL,400 union all
select '45331','澔b',null,1000 union all
select '4720','灵a', NULL,400 union all
select '4720','灵b', NULL,150 union all
select '4966','慧澄僧',NULL,50 union all
select '5041','嘎','林组',400 union all
select '5760','孤坟野','慧新',500 union all
select '806790','舞自飛','韩导组',650 union all
select '8729','心','飞',100 union all
select '8729','心','飞',250 union all
select '123456','其','飞',250 union all
select '9425','伟',null,700

;with b_new as(
SELECT b.khqq,SUM(b.khyf) khyf FROM A as b where
khz is null
group by b.khqq
)
--将数据插入表B
insert into B
select b.khqq,(select top 1 khnc from A WHERE khqq=b.khqq) as khnc,null,b.khyf from b_new
as b

select * from B
/*
khqq khnc khz khyf
45331 澔a NULL 1400
4720 灵a NULL 550
4966 慧澄僧 NULL 50
9425 伟 NULL 700
*/
--将数据插入表C
insert into C(khz,khyf)
SELECT b.khz,SUM(b.khyf) khyf FROM A as b where
khz is not null
group by b.khz

select khz,khyf from C
/*
khz khyf
飞 600
韩导组 650
慧新 500
林组 400
*/

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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