2012-05-23 34 views
0

我有一份要做的事情,想要打破它的清单,在人们之间分开,他们可以做一天的事情。这个数据是在2个表打破工作人员名单和人们每天可以做的工作#

,所以我有2代表第一是做
表1

task 
----------- 
job a 
job b 
job c 
... 
job z 

表2是人名单的事情的清单,以及如何我的东西他们可以每天做

person | date  | amount 
------- -------- ---------- 
Mike 05/23/12 3 
Paul 05/23/12 2 
Mike 05/24/12 1 
Paul 05/24/12 3 
... 
Mike 06/01/12 6 
Paul 06/01/12 9 

,所以我想要的是得到类似

Order_id| Person |date  |task 
-------- --------- --------- ----------- 
1  Mike  05/23/12 job a 
2  Mike  05/23/12 job b 
3  Mike  05/23/12 job c 
4  Paul  05/23/12 job d 
5  Paul  05/23/12 Job e 
6  Mike  05/24/12 job f 
7  Paul  05/24/12 job g 
... 
26  Mike  06/01/12 job z 

我不知道我会如何去做这件事。我在Postgres 8.4中工作

回答

0

使用另一个表:table3,它具有从1到(最大金额)的整数序列,您可以查询它。

表3的样品

seq 
----- 
1 
2 
3 
4 
... 
9 
10 
11 
... 

示例查询的

select 
    sub1.Order_id, 
    sub2.Person, 
    sub2.date, 
    sub1.task 
from 
(
select 
    row_number() over(order by task) as Order_id, 
    task 
from table1 
order by task 
) as sub1 
inner join 
(
select 
    row_number() over(order by table2.date, table2.person) as Order_id, 
    table2.person, 
    table2.date, 
    table2.amount, 
    table3.seq 
from table2 
inner join table3 
on table2.amount >= table3.seq 
) as sub2 
on sub1.Order_id = sub2.Order_id 

注意窗口的功能,如row_number()可用以来的Pos​​tgreSQL版本8.4。

+0

很好用! –