2012-03-06 67 views
0

我有這樣的一個表:(注意id_pack不自動遞增)SQL Server查詢 - 我不能弄明白

id_pack  start_date   end_date   is_parent id_contract 
1    2011-11-01   2012-01-18   1   5547 
2    2012-01-18   2050-01-01   1   5547 
3    2009-02-02   2050-01-01   0   5547 

其中id_pack = 3是父母雙方的子女。我想查詢選擇2012-01個月的父母和孩子,但孩子需要翻倍(因爲他的第一個父母在2012-01-18完成)。所以結果需要看起來像這樣:

id_pack  start_date   end_date   id_parent 
1    2012-01-01   2012-01-18  0 
2    2012-01-18   2012-01-31  0 
3    2012-01-01   2012-01-18  1 
3    2012-01-18   2012-01-31  2 

我已經嘗試了各種方式,我無法弄清楚。我這樣做是因爲父母在另一張桌子上被分配了一個價格費率,而在當月這個孩子有兩個價格不同的父母,所以我需要從2012-01-01:2012-01-18使用利率計劃和2012-01-18:2012-01-31使用另一個利率計劃。

這甚至可能有一個查詢?

謝謝

PS:我有這樣的事情:

select c.id_pack, 
      case when c.start_date < '2012-01-01' then '2012-01-01' 
      else c.start_date 
      end as start_date, 

      case end date ...... the same as start_date as end_date, 


    from client a 
    join contract b on b.id_client = a.id_client 
    join package c on c.id_contract = b.id_contract 
     and c.start_date < dateadd(mm,1,'2012-01-01') 
     and c.end_date >= '2012-01-01' 
    where a.id_clinet = '12345' 
+3

另外:請問該行用'id_pack = 3'知道**這* *其他行是其父項?我沒有看到他們之間的任何聯繫..... – 2012-03-06 11:31:46

+0

我編輯了我的文章。謝謝 – pufos 2012-03-06 11:35:28

+0

謝謝 - 但我仍然沒有看到子行#3如何知道哪些其他行是它的父母.....是不是有'ParentID'或表中的東西? – 2012-03-06 11:36:28

回答

0

嘗試:

select c.id_pack, p.start_date, p.end_date, coalesce(p.id_pack,0) id_parent 
from package c 
left join package p 
     on c.contract_id = p.contract_id and p.is_parent = 1 and c.is_parent = 0