我有一个表客户,其中有100行。为表中的活动/非活动客户设置状态列。
我想要做的是按特定顺序从表格中选择所有客户 即
前7位活跃客户,3位非活跃客户,7位活跃客户,3位非活跃客户等
如何在查询中实现此目的。
我正在使用sql server 2008。请帮助我......
答案 0 :(得分:2)
这样的事情应该根据你到目前为止列出的最低要求来做到这一点:
;with NumberedRows as (
select
*, --TODO - pick columns
ROW_NUMBER() OVER(PARTITION BY status ORDER BY PKID) - 1 as rn
from
table
), AlteredOrdering as (
select
*, --TODO - pick columns
CASE
WHEN status = 'active' THEN (10 * (rn/7)) + (rn % 7)
WHEN status = 'inactive' THEN (10 * (rn/3)) + 7 + (rn % 3)
END as FinalOrder
from NumberedRows
)
select * from AlteredOrdering ORDER BY FinalOrder
显然,根据需要更改表名和列名。假设PKID
是表中的其他列,可以对其进行排序。
AlteredOrdering CTE中的神奇数字有望显而易见 - 问题中有7个和3个,并且表示每个项目应在每个“组”中出现的数量。 10是每个“组”的总大小。因此,如果它是9活动的,4是非活动的,则CASE表达式将如下所示:
WHEN status = 'active' THEN (13 * (rn/9)) + (rn % 9)
WHEN status = 'inactive' THEN (13 * (rn/4)) + 9 + (rn % 4)
答案 1 :(得分:0)
据我所知,你不能。从SQL
中检索数据后,可能需要处理数据答案 2 :(得分:0)
如果你只有100行,那么可能会限制x,y与union结合可以帮助
select * from table where status=active limit 0,7
union
select * from table where status=inactive limit 7,3
union
select * from table where status=active limit 10,7
union
select * from table where status=inactive limit 17,3
...