2012-05-23 36 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

很好用! –