怎样用sql查询某一列的惟一值以及其他列的数据?

如图,希望从A表得到B表,而不是C表。其中B表后两列的数据可以随便取,即A表中1、2、3三条随便取一条,4、5两条随便取一条,得到B表... 如图,希望从A表得到B表,而不是C表。
其中B表后两列的数据可以随便取,即A表中1、2、3三条随便取一条,4、5两条随便取一条,得到B表
展开
 我来答
轻如草芥
2013-08-20
知道答主
回答量:3
采纳率:0%
帮助的人:2.9万
展开全部
其实有很多种方法 但是都会需要传参数才能做到动态匹配

比较笨的方法:
select * from student s where name in (select distinct(name) from student where name='tom(此处应该动态匹配)' group by name ) and rownum=1
union
select * from student s where name in (select distinct(name) from student where name='Jim(此处应该动态匹配)' group by name ) and rownum=1

希望可以帮到你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
manzhhl
2013-08-20 · TA获得超过248个赞
知道答主
回答量:103
采纳率:0%
帮助的人:29.4万
展开全部
使用窗口函数是效率最高的方法,没有之一.

with t as
(select *, row_number()Over(partition by name order by score) as rn
from A
)
select name, subject, score from t where rn =1;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
toshiojkx
2013-08-20 · TA获得超过492个赞
知道小有建树答主
回答量:260
采纳率:100%
帮助的人:104万
展开全部
select name, subject, score from
(select *, row_number() over(partition by name order by newid()) as num from A) as TEMP
where num = 1

A中name相同的随机取一条
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chen_hongyang
2013-08-20 · TA获得超过5447个赞
知道大有可为答主
回答量:2790
采纳率:91%
帮助的人:863万
展开全部
select * from 表 as a , (
select name,min(subject) from 表 group by name
) as b
where a.name = b.name
and a.subject = b.subject
---取最小值
追问
如果同一name下,subject和score都有重复的内容,按照你的方法,需要查询两次才能得到需要的结果。怎样才能只查一次?

原始表如下:
name subject score
Tom 语文 90
Tom 语文 91
Tom 数学 90
追答
改成
select * from 表 as a , (
select name+convert(varchar,score),min(subject) from 表 group by name+convert(varchar,score)) as b
where a.name = b.name
and a.subject = b.subject
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式