首页 新闻 会员 周边 捐助

sql三个表中查询去除重复项问题

0
悬赏园豆:120 [已解决问题] 解决于 2011-04-22 13:47

create table cate
(
 id int primary key,
 cateName nvarchar(50),
 countScore float,--分数
 ctime smalldatetime default(getdate())--添加该类别时间
)
create table kplan
(
 id int identity(1,1) primary key,
 username nvarchar(30) foreign key references Users(username),
 cid int  foreign key references cate(id),--类别id外键
 context text,--内容
 ptime nvarchar(12),--几月份(上中下旬)计划时间
 publishTime smalldatetime default(getdate()),--填写时间
 sIf nvarchar(10) default('未审核')--已审核、未审核
)
create table kpractice(
 id int identity(1,1) primary key,
 username nvarchar(30) foreign key references Users(username),
 cid int  foreign key references cate(id),--类别id外键
 practice   text,,--得分
 ptime nvarchar(12)--几月份(上中下旬)计划时间
 publishTime smalldatetime default(getdate()),--填写时间
)
我写的语句是:
select c.id as id,c.cateName as cateName,k.context as context,c.countScore as countScore,p.practice from ((kplan as k inner join cate as c on k.cid=c.id) inner join kpractice as p on p.cid=c.id) where k.username='张三' and k.ptime='2011年4月上旬' and k.sIf='已审核'
得到的结果:
id       cateName                         context  countScore  score
1 原有系统常规维护工作是基础工作   aa              40             40

2 新项目建设计划完成工作               aa              40               40
3 其他工作                                    aa              10                5
4 学习                                          aa               10                5

1 原有系统常规维护工作是基础工作   aa              40              10
2 新项目建设计划完成工作               aa              40               11
3 其他工作                                    aa               10               10
4 学习                                          aa                10              10
怎么去除每行的重复项呢?请教高手?

问题补充: 写错了score这列应该是practice列
aspneteye的主页 aspneteye | 初学一级 | 园豆:4
提问于:2011-04-22 10:58
< >
分享
最佳答案
0

1,先确定哪里有重复,即你业务对重复的定义。

2,针对有复杂的使用distinct

收获园豆:120
Jerry Chou | 老鸟四级 |园豆:2642 | 2011-04-22 11:33
我真弄不了!不知道怎么弄了?你帮我看看好不?
aspneteye | 园豆:4 (初学一级) | 2011-04-22 11:37
这个跟你的表定义和数据有关,即你想得到什么样的数据。

什么样的数据,对你来说是重复的?
Jerry Chou | 园豆:2642 (老鸟四级) | 2011-04-22 11:38
哥们帮我看看吧。我qq是331512835
aspneteye | 园豆:4 (初学一级) | 2011-04-22 11:40
最后,这位兄弟想要的答案是
select * from
dbo.cate as T1
inner join
(
select a.*,b.practice from
dbo.kplan as a
left join dbo.kpractice as b
on a.username=b.username and a.cid=b.cid
) T2
on t1.id = t2.cid
where t2.username='张玉刚' and t2.ptime='2011年4月中旬' and t2.sIf='未审核'
Jerry Chou | 园豆:2642 (老鸟四级) | 2011-04-22 13:49
其他回答(3)
0

distinct

avic_ren | 园豆:373 (菜鸟二级) | 2011-04-22 11:25
select distinct c.id as id,c.cateName as cateName,convert(varchar(8000),k.context) as context,c.countScore as countScore,convert(varchar(8000),p.practice) as practice from ((kplan as k inner join cate as c on k.cid=c.id) inner join kpractice as p on p.cid=c.id) where k.username='张玉刚' and k.ptime='2011年4月中旬' and k.sIf='未审核'
这样出来的效果还是重复的
支持(0) 反对(0) aspneteye | 园豆:4 (初学一级) | 2011-04-22 11:38
0

用left join 写SQl语句,不会有重复的了

杀 手 | 园豆:213 (菜鸟二级) | 2011-04-22 12:25
0

id       cateName                         context  countScore  score
1 原有系统常规维护工作是基础工作   aa              40             40

2 新项目建设计划完成工作               aa              40               40
3 其他工作                                    aa              10                5
4 学习                                          aa               10                5
1 原有系统常规维护工作是基础工作   aa              40              10
2 新项目建设计划完成工作               aa              40               11
3 其他工作                                    aa               10               10
4 学习                                          aa                10              10

这是查询表返回的所有结果?

dahaiwuliang | 园豆:175 (初学一级) | 2011-04-22 12:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册