2012-03-06 73 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