表格式如下:ID S_ID COURSE_NAME STATE
1 1900560013 课程A 0
2 1900560013 课程A 1
3 1900930116 课程A 0
4 1900930116 课程A 1
5 1900930116 课程B 1
6 1900930116 课程C 0
7 1900930116 课程B 0
8 1900930116 课程C 1
现在 S_ID,COURSE_NAME 两个字段有重复,需要删除重复,但是两条重复的数据需检查STATE,需要删除的是STATE=1的,如果两天重复的数据STATE都等于1,则任意删除一条。
1 1900560013 课程A 0
2 1900560013 课程A 1
3 1900930116 课程A 0
4 1900930116 课程A 1
5 1900930116 课程B 1
6 1900930116 课程C 0
7 1900930116 课程B 0
8 1900930116 课程C 1
现在 S_ID,COURSE_NAME 两个字段有重复,需要删除重复,但是两条重复的数据需检查STATE,需要删除的是STATE=1的,如果两天重复的数据STATE都等于1,则任意删除一条。
解决方案 »
- vs2008中javascript智能提示消失
- 请问如何弹出提示信息
- 跪求:水晶报表翻页问题
- ???如何调用控件的代码**********************************************
- 急!session 设置为StateServer 状态时 当用Response.Redirect 到另外页面时 session失效!
- MapXTreme 3.0 For Win + ASP.NET,知道的进来(关于GIS开发)
- 程序中如何读取resx文件内容
- 网站发布后,与运行调试的显示效果不同!
- 谁能告诉我这个控件:“可以动态加载UserControl的ViewPanel控件”怎么用?
- asp.net 程序不需要aspx文件行不?
- 求一个计算距离的方法
- 数据库中的varbinary对应C#中的那种数据类型
from a
where state=1
group by s_id)
看下
现在 S_ID,COURSE_NAME 两个字段有重复,需要删除重复,但是两条重复的数据需检查STATE,需要删除的是STATE=1的,如果两天重复的数据STATE都等于1,则任意删除一条。你这里分组的条件 貌似少啦个 coursename
create table #t
(
ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
S_ID VARCHAR(50) NOT NULL,
COURSE_NAME VARCHAR(20) NOT NULL,
STATE BIT NOT NULL
)
insert into #t
values
('1900560013','A',0),
('1900560013','A',1),
('1900930116','A',1),
('1900930116','A',1),
('1900930116','A',1),
('1900930116','B',1),
('1900930116','C',0),
('1900930116','B',0),
('1900930116','C',1)--先删除S_ID,COURSE_NAME,[STATE] 完全一样的数据,只剩下一条
--上面的insert语句中3,4,5 S_ID,COURSE_NAME,[STATE]都一样,所以就剩下了3
delete from #t
where ID not in
(
select min(id)
from #t
group by S_ID,COURSE_NAME,[STATE]
)select * from #t--这个地方就按照你的要求删除S_ID,COURSE_NAME一样,但[STATE]=1的数据
delete from #t
where ID in
(
select t.ID from #t t
inner join
(
select S_ID,COURSE_NAME from #t
group by S_ID,COURSE_NAME
having COUNT(*)>1
) as tt on t.s_id=tt.s_id and t.course_name=tt.course_name
where t.state=1
)select * from #tdrop table #t