问一个SQL语句该怎么写,一次列出字段中相同值出现的次数,并显示在增加的列中(不是算出现次数的和)

问一个SQL语句该怎么写。例如:
id name counts(虚拟的一列)
1 XXX 1
2 YYY 1
3 YYY 2
4 XXX 2
5 ZZZ 1
6 XXX 3

这个很简单啊,根据你自己的这个要求可以看出,首先,你查出的数据id一直没变,name重复的也没去掉,只是多加了一个,counts字段。而counts用聚合函数就可以求出,因为你没去掉重复的那么聚合函数就不能放在前面了,因为它查出来的是一个——而你重复是二个以上的,不对应,你把聚合查询到的和其它要的当两个张表来查询就可以了。你可以这样写
select id,name,c.* from 你的表名,(select count(name) counts from 你的表名) c
这里的counts是任意的,相当于一个别名,显示的效果就是你要加入的那列的字段名。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-29
给你个示例看下吧,主要是rank函数的使用,本例支持2005及以上版本。
with yy as
(
select 1 id,'a' name
union all
select 2,'a'
union all
select 3,'b'
union all
select 4,'c'
union all
select 5,'b'
union all
select 6,'a'
)

select id, name
,RANK() over(partition BY name order by id) counts
from yy
order by id追问

with yy as
(
select 1 id,'a' name
union all
select 2,'a'
union all
select 3,'b'
union all
select 4,'c'
union all
select 5,'b'
union all
select 6,'a'
)这段代码是啥意思?

追答

使用 查询语句,建一个公用表表达式。你可以把它当做临时表。

追问

我如果表中的数据较多了,您好像是定义好的,我数据多的话要怎么处理呢

追答

你应该是个小小白
对于你的追问不再做回答。

第2个回答  2012-05-29
SELECT *, Row_Number() OVER (partition by NAME ORDER BY id asc) counts FROM NAMES order by id追问

您好 如果要是给一个字段中相同的值排序要怎么写?
姐姐 帮个忙

本回答被提问者采纳
相似回答