sqlserver的sql语句编写
发布网友
发布时间:2023-01-01 18:04
我来回答
共4个回答
热心网友
时间:2023-10-08 16:09
select 考生号,考生姓名,right('0'+cast(ceiling(cast(考生号 as int)/30) as varchar(2)),2) as
考场号 from tb
热心网友
时间:2023-10-08 16:10
select ntile(30) over(order by 考生号) as 考场号,考生号,考生姓名 from 表
sql 2005及以上支持,其它不会追问不支持ntile函数
热心网友
时间:2023-10-08 16:10
你是要写查询语句? 就是 忽略 考场号。
仅仅根据 考生号与考生姓名
查询出一个
考生号 考生姓名 考场号
的查询结果?
还是更新语句啊?
就是 UPDATE 表 SET 考场号 = ...
还有就是, 考场排列, 是顺序排列? 还是随机?
也就是前30个人考场1, 31-60个考场2?
还是打乱顺序的, 选30个人考场1,选30个人考场2?
如果是要打乱顺序的, 那你需要说明一下, 是什么数据库?
因为不同的数据库, 使用的随机函数不一样。
CREATE TABLE #test (
考生号 varchar(10),
考生姓名 varchar(10)
);
INSERT INTO #test
SELECT '01', '张三' UNION ALL
SELECT '02', '李四' UNION ALL
SELECT '03', '王五' UNION ALL
SELECT '04', '赵六' UNION ALL
SELECT '05', '赵A' UNION ALL
SELECT '06', '赵B' UNION ALL
SELECT '07', '赵C' UNION ALL
SELECT '08', '赵D'
GO
SELECT
考生号,
考生姓名,
(ROW_NUMBER() OVER( ORDER BY newid() ) + 2) /3
FROM
#test
ORDER BY
3
GO
上面的查询, 是模拟 每个考场3 个人的情况。
你把
(ROW_NUMBER() OVER( ORDER BY newid() ) + 2) /3
修改为
(ROW_NUMBER() OVER( ORDER BY newid() ) + 29) /30
就是每个考场 30个人的情况了。
热心网友
时间:2023-10-08 16:11
亲,你这是闹拿出啊!直接用软件直观处理不玩了吗!还写sql语句干嘛~