2012-03-06 18 views
0

それを把握することはできません:id_pack = 3は両親の子である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が自動インクリメントされない注意してください)。 2012-01年の両親と子供を選択するクエリを作成したいが、その子供は2倍にする必要がある(最初の親が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 

私はあらゆる方法で試してみましたが、わかりません。私はこれをやっているのは、両親が別のテーブルで料金設定されているからです。今月の子供は2人の保護者がいて、料金が違うので、2012-01-01:2012-01-18から2012-01-18:2012-01-31から別の料金プランを使用してください。

これは1つのクエリでも可能ですか?

はあなたに

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 'の知っている**これは*で行をし、私はこのようなものを持っています*他の行はその親ですか?私はそれらの間のリンクを見ません..... –

+0

私は自分の投稿を編集しました。ありがとう – pufos

+0

ありがとう - しかし、私はまだ子行#3が他の行のどれがその親であるかを知っているのを見ていません.....そこに 'ParentID'か何かがありますか? –

答えて

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 
関連する問題