使用where子句中的计数条件选择行

时间:2015-02-19 18:11:44

标签: sql sql-server tsql

有一个表,MyTable(ID,Type,Date)。列'Type'的值可以是1或2.

必须选择以“日期”排序并满足以下条件的前“x”行。('a'和'b'是整数值)

所选的'x'行最多只能包含'a'类型1行和'b'类型2行。(如果a + b

我可能完全错了,但我想通过在WHERE子句中包含count()来实现这一点。但我不知道该怎么做。

我该如何解决这个问题?

更新

示例 -

enter image description here

x = 5

案例1: a = 5,b = 5

结果:行1,2,3,4,5

案例2: a = 4,b = 1

结果:行1,2,4,6,8

案例3: a = 1,b = 5

结果:行1,2,3,5,7

案例4: a = 2,b = 1

结果:行1,2,4

1 个答案:

答案 0 :(得分:4)

您可以通过将UNION嵌套在另一个查询中来实现:

select top @x *
from (

   select top @a *
   from table 
   where type = '1'
   order by [date]

  union

   select top @b *
   from table
   where type = '2'
   order by [date]

) t
order by [date]