select id,name from(select *,row=row_number()over(partition by name order by newid()) from tb)t where row=1
#5
服务器的版本貌似是SQL2000,于是乎:'row_number' 不是可以识别的 函数名。
#6
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b'
select t.name,MAX(id)
from t
group by t.name
drop table t
#7
这样是取ID最大的吧,我要随机的额..
#8
改一下6楼的代码,这样可以随机,但是在数据量大的时候才容易随机
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b'
select t.name,(SELECT TOP 1 id FROM t a WHERE a.NAME=t.NAME ORDER BY CHECKSUM(NEWID()))id
from t
group by t.name
drop table t
#9
declare @tab table(id int,name char(1))
insert into @tab
select 1,'a' union all
select 2,'b' union all
select 3,'c' union all
select 4,'c' union all
select 5,'b'
;with sel as(
select *,ROW_NUMBER() over(partition by name order by newid()) as row from @tab)
select ID,name from sel where row=1
#10
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b'
select t.name,(SELECT TOP 1 id FROM t a WHERE a.NAME=t.NAME ORDER BY RAND()*100)id
from t
group by t.name
--RAND()*100 100为一个基数根据本身id列值得范围进行修改
drop table t
#11
CHECKSUM 用于生成哈希索引,产生的值一般很大或者很小,所以产生的就不是第一个就是最后一个。
#12
你确定?多执行几次看看是不是真的不是第一就是最后?我执行的结果不是你说的那样
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b' union
select 6,'a' union
select 7,'b' union
select 8,'c' union
select 9,'c' union
select 10,'b'
select t.name,(SELECT TOP 1 id FROM t a WHERE a.NAME=t.NAME ORDER BY CHECKSUM(NEWID()))id
from t
group by t.name
drop table t
#13
declare @tab table(id int,name char(1))
insert into @tab
select 1,'a' union all
select 2,'b' union all
select 3,'c' union all
select 4,'c' union all
select 5,'b'
;with sel as(
select *,ROW_NUMBER() over(partition by name order by newid()) as row from @tab)
select ID,name from sel where row=1
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b'
select t.name,(SELECT TOP 1 id FROM t a WHERE a.NAME=t.NAME ORDER BY CHECKSUM(NEWID()))id
from t
group by t.name
drop table t
测试成功了,谢谢版主大人..
#16
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b'
select t.name,(SELECT TOP 1 id FROM t a WHERE a.NAME=t.NAME ORDER BY RAND()*100)id
from t
group by t.name
--RAND()*100 100为一个基数根据本身id列值得范围进行修改
drop table t
这方法也可以,谢谢你们的帮忙啦!!
#17
不谢 不谢 小子 继续加油~~~
#18
改一下6楼的代码,这样可以随机,但是在数据量大的时候才容易随机
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b'
select t.name,(SELECT TOP 1 id FROM t a WHERE a.NAME=t.NAME ORDER BY CHECKSUM(NEWID()))id
from t
group by t.name
drop table t
CHECKSUM 用于生成哈希索引,产生的值一般很大或者很小,所以产生的就不是第一个就是最后一个。
你确定?多执行几次看看是不是真的不是第一就是最后?我执行的结果不是你说的那样
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b' union
select 6,'a' union
select 7,'b' union
select 8,'c' union
select 9,'c' union
select 10,'b'
select t.name,(SELECT TOP 1 id FROM t a WHERE a.NAME=t.NAME ORDER BY CHECKSUM(NEWID()))id
from t
group by t.name
drop table t
我尝试了print CHECKSUM(NEWID()),你可以尝试一下,数据值非常大或者非常小。
#19
改一下6楼的代码,这样可以随机,但是在数据量大的时候才容易随机
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b'
select t.name,(SELECT TOP 1 id FROM t a WHERE a.NAME=t.NAME ORDER BY CHECKSUM(NEWID()))id
from t
group by t.name
drop table t
CHECKSUM 用于生成哈希索引,产生的值一般很大或者很小,所以产生的就不是第一个就是最后一个。
你确定?多执行几次看看是不是真的不是第一就是最后?我执行的结果不是你说的那样
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b' union
select 6,'a' union
select 7,'b' union
select 8,'c' union
select 9,'c' union
select 10,'b'
select t.name,(SELECT TOP 1 id FROM t a WHERE a.NAME=t.NAME ORDER BY CHECKSUM(NEWID()))id
from t
group by t.name
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b'
select t.name,(SELECT TOP 1 id FROM t a WHERE a.NAME=t.NAME ORDER BY CHECKSUM(NEWID()))id
from t
group by t.name
drop table t
CHECKSUM 用于生成哈希索引,产生的值一般很大或者很小,所以产生的就不是第一个就是最后一个。
你确定?多执行几次看看是不是真的不是第一就是最后?我执行的结果不是你说的那样
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b' union
select 6,'a' union
select 7,'b' union
select 8,'c' union
select 9,'c' union
select 10,'b'
select t.name,(SELECT TOP 1 id FROM t a WHERE a.NAME=t.NAME ORDER BY CHECKSUM(NEWID()))id
from t
group by t.name
select id,name from(select *,row=row_number()over(partition by name order by newid()) from tb)t where row=1
#5
select id,name from(select *,row=row_number()over(partition by name order by newid()) from tb)t where row=1
服务器的版本貌似是SQL2000,于是乎:'row_number' 不是可以识别的 函数名。
#6
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b'
select t.name,MAX(id)
from t
group by t.name
drop table t
#7
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b'
select t.name,MAX(id)
from t
group by t.name
drop table t
这样是取ID最大的吧,我要随机的额..
#8
改一下6楼的代码,这样可以随机,但是在数据量大的时候才容易随机
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b'
select t.name,(SELECT TOP 1 id FROM t a WHERE a.NAME=t.NAME ORDER BY CHECKSUM(NEWID()))id
from t
group by t.name
drop table t
#9
declare @tab table(id int,name char(1))
insert into @tab
select 1,'a' union all
select 2,'b' union all
select 3,'c' union all
select 4,'c' union all
select 5,'b'
;with sel as(
select *,ROW_NUMBER() over(partition by name order by newid()) as row from @tab)
select ID,name from sel where row=1
#10
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b'
select t.name,(SELECT TOP 1 id FROM t a WHERE a.NAME=t.NAME ORDER BY RAND()*100)id
from t
group by t.name
--RAND()*100 100为一个基数根据本身id列值得范围进行修改
drop table t
#11
改一下6楼的代码,这样可以随机,但是在数据量大的时候才容易随机
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b'
select t.name,(SELECT TOP 1 id FROM t a WHERE a.NAME=t.NAME ORDER BY CHECKSUM(NEWID()))id
from t
group by t.name
drop table t
CHECKSUM 用于生成哈希索引,产生的值一般很大或者很小,所以产生的就不是第一个就是最后一个。
#12
改一下6楼的代码,这样可以随机,但是在数据量大的时候才容易随机
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b'
select t.name,(SELECT TOP 1 id FROM t a WHERE a.NAME=t.NAME ORDER BY CHECKSUM(NEWID()))id
from t
group by t.name
drop table t
CHECKSUM 用于生成哈希索引,产生的值一般很大或者很小,所以产生的就不是第一个就是最后一个。
你确定?多执行几次看看是不是真的不是第一就是最后?我执行的结果不是你说的那样
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b' union
select 6,'a' union
select 7,'b' union
select 8,'c' union
select 9,'c' union
select 10,'b'
select t.name,(SELECT TOP 1 id FROM t a WHERE a.NAME=t.NAME ORDER BY CHECKSUM(NEWID()))id
from t
group by t.name
drop table t
#13
declare @tab table(id int,name char(1))
insert into @tab
select 1,'a' union all
select 2,'b' union all
select 3,'c' union all
select 4,'c' union all
select 5,'b'
;with sel as(
select *,ROW_NUMBER() over(partition by name order by newid()) as row from @tab)
select ID,name from sel where row=1
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b'
select t.name,(SELECT TOP 1 id FROM t a WHERE a.NAME=t.NAME ORDER BY CHECKSUM(NEWID()))id
from t
group by t.name
drop table t
测试成功了,谢谢版主大人..
#16
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b'
select t.name,(SELECT TOP 1 id FROM t a WHERE a.NAME=t.NAME ORDER BY RAND()*100)id
from t
group by t.name
--RAND()*100 100为一个基数根据本身id列值得范围进行修改
drop table t
这方法也可以,谢谢你们的帮忙啦!!
#17
不谢 不谢 小子 继续加油~~~
#18
改一下6楼的代码,这样可以随机,但是在数据量大的时候才容易随机
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b'
select t.name,(SELECT TOP 1 id FROM t a WHERE a.NAME=t.NAME ORDER BY CHECKSUM(NEWID()))id
from t
group by t.name
drop table t
CHECKSUM 用于生成哈希索引,产生的值一般很大或者很小,所以产生的就不是第一个就是最后一个。
你确定?多执行几次看看是不是真的不是第一就是最后?我执行的结果不是你说的那样
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b' union
select 6,'a' union
select 7,'b' union
select 8,'c' union
select 9,'c' union
select 10,'b'
select t.name,(SELECT TOP 1 id FROM t a WHERE a.NAME=t.NAME ORDER BY CHECKSUM(NEWID()))id
from t
group by t.name
drop table t
我尝试了print CHECKSUM(NEWID()),你可以尝试一下,数据值非常大或者非常小。
#19
改一下6楼的代码,这样可以随机,但是在数据量大的时候才容易随机
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b'
select t.name,(SELECT TOP 1 id FROM t a WHERE a.NAME=t.NAME ORDER BY CHECKSUM(NEWID()))id
from t
group by t.name
drop table t
CHECKSUM 用于生成哈希索引,产生的值一般很大或者很小,所以产生的就不是第一个就是最后一个。
你确定?多执行几次看看是不是真的不是第一就是最后?我执行的结果不是你说的那样
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b' union
select 6,'a' union
select 7,'b' union
select 8,'c' union
select 9,'c' union
select 10,'b'
select t.name,(SELECT TOP 1 id FROM t a WHERE a.NAME=t.NAME ORDER BY CHECKSUM(NEWID()))id
from t
group by t.name
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b'
select t.name,(SELECT TOP 1 id FROM t a WHERE a.NAME=t.NAME ORDER BY CHECKSUM(NEWID()))id
from t
group by t.name
drop table t
CHECKSUM 用于生成哈希索引,产生的值一般很大或者很小,所以产生的就不是第一个就是最后一个。
你确定?多执行几次看看是不是真的不是第一就是最后?我执行的结果不是你说的那样
create table t
(
id int,
name varchar(10)
)
insert into t
select 1,'a' union
select 2,'b' union
select 3,'c' union
select 4,'c' union
select 5,'b' union
select 6,'a' union
select 7,'b' union
select 8,'c' union
select 9,'c' union
select 10,'b'
select t.name,(SELECT TOP 1 id FROM t a WHERE a.NAME=t.NAME ORDER BY CHECKSUM(NEWID()))id
from t
group by t.name