再次请教大虾一个问题

pandarsok 2006-08-21 04:38:17
刚才问了一下问题:

我现在有一个表如下

XH CJ
001 25
001 44
001 62
001 49
002 32
002 33
002 65
003 18
003 22
003 75

我现在要用一条SQL语句实现
XH CJ
001 44
002 33
003 75

在这里的CJ是随机的,比如003可以是22,也可以是18 也可以是75,每执行一次可以均不一样


大虾们给我这样一个答案:

create table test(XH char(3), CJ int)
insert test(XH,CJ)
select '001', 25 union all
select '001', 44 union all
select '001', 62 union all
select '001', 49 union all
select '002', 32 union all
select '002', 33 union all
select '002', 65 union all
select '003', 18 union all
select '003', 22 union all
select '003', 75
select * from test

--据大侠们说,如果数据量大的话,这种效率写法效率很低
select
XH,
CJ=(select top 1 CJ from test where XH=t.XH order by newid())
from test t
group by XH

drop table test


我现在如果这个表还有一两列
如:


XH CJ DW KC
001 25 NJ WL
001 44 BJ HX
001 62 BJ WL
001 49 SH ZW
002 32 NJ ZW
002 33 SH SX
002 65 NJ WL
003 18 SH HX
003 22 NJ WL
003 75 BJ ZW

我现在要用一条SQL语句实现
XH CJ DW KC
001 44 BJ HX
002 33 SH SX
003 75 BJ ZW

在这里CJ是随机的,而DW与KC是根据CJ的所在纪录的值而来的,请问我又该怎么写,谢谢

在这里的CJ是随机的,比如003可以是22,也可以是18 也可以是75,每执行一次可以均不一样
...全文
114 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
MicrosoftSQL 2006-08-21
  • 打赏
  • 举报
回复
郁闷,怎么这里还有一帖……
lxzm1001 2006-08-21
  • 打赏
  • 举报
回复
alter table tablename add id int identity(1,1) primary key
pandarsok 2006-08-21
  • 打赏
  • 举报
回复
如果表中在加一列ID,为主键,那要怎么写?
fcuandy 2006-08-21
  • 打赏
  • 举报
回复
改用连接,可能稍好一点点,不过也会很慢.如果表中有标识列,那么应该会有再快点的写法.

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧