"[图片] 怎么样才能在每次查询的时候在sjid列每一个重复的内容中随机选一列的内容显示出来? 自己已经试了一上午了,新手,不会啊,求大神帮忙了~"

SQL SERVER 2008 求助

41e1340b59344daf868886341073b5a3-QQ20161115141519.png
怎么样才能在每次查询的时候在sjid列每一个重复的内容中随机选一列的内容显示出来?
自己已经试了一上午了,新手,不会啊,求大神帮忙了~

打赏 1 积分后可见
0     0     0     0     0     2
优质回帖
  • Zephyr • 3 个月前 2

    话说你这个问题能不能放到程序里面做,反正你们要随机读取的话,每次都要查询,不如就查询出所有的来,每次请求返回随机一个好了

  • ephen • 3 个月前 1

    你是要每个sjid只随机选出一条数据么?
    这样的话,可以用存储过程啊。

    先 select distinct sjid from table ,把值存到一个变量里面再Loop循环取出来。

    select TOP 1 * FROM table where sjid = :sjid order by newid()

    这样行不行?

    PS:没接触过SqlServer,只是个思路……newid也是刚查到的,不晓得能不能用……

  • ephen • 3 个月前 1

    必须用sql语句的话,看看别人是不是有什么高明意见~
    我不是做技术的,只是随便插两句嘴。大家继续……O(∩_∩)O

23 回帖  
  • Zephyr • 3 个月前

    话说你这个问题能不能放到程序里面做,反正你们要随机读取的话,每次都要查询,不如就查询出所有的来,每次请求返回随机一个好了

    1 回复 2   1   0  
  • luqiao19950804 • 3 个月前

    怎么请求。。

    1 回复 0   0   0  
  • Zephyr • 3 个月前

    我是说,你查询出全部,放到Java的List里,然后再根据sjid取随机一条
    就是如果数据量很大估计有问题……

    1 回复 0   0   0  
  • luqiao19950804 • 3 个月前

    products这个表有七十多W的数据量

    0   0   0  
  • ephen • 3 个月前

    你这个逻辑有点问题吧?
    sjid不重复,又不是查重复数量。。那其他列又不是重复的,怎么会存在剔重……

    需求就感觉不太明确。

    2 回复 0   0   0  
  • Zephyr • 3 个月前

    他的意思是根据sjid分组,对每组取出随机一条来

    2 回复 0   0   0  
  • luqiao19950804 • 3 个月前

    select * 查询了所有的内容,每一条内容本身是不重复的,但是sjid这一列相当于一个类,有很多内容隶属于一个类,要求是把每个类能显示出来,但是类里面的内容只随机显示一条出来。。

    0   0   0  
  • luqiao19950804 • 3 个月前

    对,就是这意思。。

    0   0   0  
  • ephen • 3 个月前

    你是要每个sjid只随机选出一条数据么?
    这样的话,可以用存储过程啊。

    先 select distinct sjid from table ,把值存到一个变量里面再Loop循环取出来。

    select TOP 1 * FROM table where sjid = :sjid order by newid()

    这样行不行?

    PS:没接触过SqlServer,只是个思路……newid也是刚查到的,不晓得能不能用……

    1 回复 1   1   0  
  • ephen • 3 个月前

    他这样的数据也没法group by吧……

    1 回复 0   0   0  
  • luqiao19950804 • 3 个月前

    那个冒号做什么用的?

    1 回复 0   0   0  
  • Zephyr • 3 个月前

    其实用存储过程看起来就没有问题了
    我们都是把前提设定为:sql解决

    1 回复 0   0   0  
  • ephen • 3 个月前

    前面取出来的变量。
    不晓得sqlserver啥语法,我记得oracle好像是这样的。

    1 回复 0   0   0  
  • luqiao19950804 • 3 个月前

    母鸡啊,我也是才接触这玩意不久。。

    1 回复 0   0   0  
  • ephen • 3 个月前

    楼主是要实现功能撒,没说一定要用sql吧?

    1 回复 0   0   0  
  • ephen • 3 个月前

    所以正好可以去学习下……

    0   0   0  
  • luqiao19950804 • 3 个月前

    是用sql server2008的语句

    1 回复 0   0   0  
  • ephen • 3 个月前

    必须用sql语句的话,看看别人是不是有什么高明意见~
    我不是做技术的,只是随便插两句嘴。大家继续……O(∩_∩)O

    1 回复 1   1   0  
  • luqiao19950804 • 3 个月前

    还是谢谢啦~

    0   0   0  
  • mainlove • 3 个月前

    有现成的帖子讨论过 但是我觉得这样写效率不会太好 ,http://bbs.csdn.net/topics/390439875/
    还是按照 ephen说的 一个一个查吧

    0   1   0  
  • luqiao19950804 • 3 个月前

    好了,自己已经搞定,就算数据量大也没有问题,下面是代码,还是谢谢大家了~
    select from (
    select
    ,row=row_number()over(partition by column oeder by newid())
    from table/后面可以跟具体的查询条件/)t
    where row=1

    1 回复 0   0   0  
  • luqiao19950804 • 3 个月前

    第二个select 后面也有个 * 居然给我整不在了。。。

    0   0   0  
  • Zephyr • 3 个月前

    不错哦,学习了
    就是我们不用sql server
    所以个人都是避免使用比较个性化的写法

    0   1   0  

赞助商 我要投放

又拍云
又拍云上线 Let’s Encrypt 和 Symantec 免费证书
到期后可免费续签
Promoted by 又拍云