首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多个分组依据

多个分组依据
EN

Stack Overflow用户
提问于 2013-05-27 07:49:50
回答 1查看 63关注 0票数 0

假设我有一个包含企业列表的表。

我希望我的结果集以这种顺序显示,但有一个查询:

第一:按照created_date的顺序显示最近创建的5个列表。然后:以随机顺序显示其余部分。

我的字段:

代码语言:javascript
复制
[BusinessName]
[Date_Created]

因此,如果表中有100家企业,我希望列表显示最近创建的5家企业,然后按随机顺序显示其余的企业。

提前感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-27 08:06:22

选项A-将前5个查询和其余查询分成两个子查询,并使用UNION选择它们

代码语言:javascript
复制
WITH CTE_TOP5 AS 
(
    SELECT TOP 5  BusinessName, Date_Created, ROW_NUMBER() OVER (ORDER BY DATE_CREATED DESC) RN FROM dbo.YourTable
    ORDER BY Date_Created DESC 
)
, CTE_REST AS 
(
    SELECT  BusinessName, Date_Created FROM dbo.YourTable
    EXCEPT 
    SELECT  BusinessName, Date_Created  FROM CTE_TOP5
)
,CTE_RESTRANDOM AS
(
    SELECT  BusinessName, Date_Created, ROW_NUMBER() OVER (ORDER BY NEWID()) + 5 RN FROM CTE_REST
)
SELECT * FROM CTE_TOP5
UNION ALL
SELECT * FROM CTE_RESTRANDOM
ORDER BY RN

选项B- ORDER BY中的CASE

代码语言:javascript
复制
;WITH CTE_TOP5 AS 
(
    SELECT TOP 5 *, ROW_NUMBER() OVER (ORDER BY DATE_CREATED DESC) RN FROM dbo.YourTable
    ORDER BY Date_Created DESC 
)
SELECT yt.*
FROM dbo.YourTable yt
LEFT JOIN CTE_TOP5 t5 ON yt.BusinessName = t5.BusinessName 
                     AND yt.Date_Created = t5.Date_Created
ORDER BY CASE WHEN t5.RN IS NOT NULL THEN t5.RN ELSE 6 END, NEWID()

选项C-类似于B,但没有CTE、ROW_NUMBERS和JOINS -整个逻辑都在ORDER BY

代码语言:javascript
复制
SELECT *
FROM dbo.YourTable yt
ORDER BY CASE WHEN yt.Date_Created IN (SELECT TOP 5 yt2.Date_Created 
                                       FROM dbo.YourTable yt2 
                                       ORDER BY yt2.Date_Created DESC)
                 THEN yt.Date_Created 
              ELSE '1900-01-01' 
          END DESC, NEWID()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16764738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档