2016-03-21 20 views
1

私は作業中にストアドプロシージャを持っていますが、実行するといくつかのデータが失われています。いくつかのPLANIDのために....それでは、私がここでやろうとしていることはこれですCASE when文SQL Server

INSERT INTO tempIntake (Pop, PlanID, PopFull, ApptDate, [1stAppt], Followup, Rn, UserID) 
SELECT Pop, PlanID, PopFull, InterviewDate, 1 stAppt, Followup, rn, @UserID 
FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY PlanID ORDER BY AddedDate ASC) AS rn 
    FROM VInfo 
    WHERE AddedDate IS NOT NULL 
) t 
WHERE rn = 1 AND interviewdate >= @fromDate AND interviewDate <= @toDate 

:私は理由を知っているが、私は、これは私のコードです...苦労のフィギュアを持っています私は日付を追加していない。私がAddedDateでフィルタリングしているので、nullの場合 - このデータは表示されません - 表示する必要があります。この場合、実際にAddedDateがテーブルで利用できるようになると、このように '1/1/2016'のようなダミーの日付にしたいと考えています。ダミーの日付の代わりに使用されます。

+0

これは奇妙に聞こえるかもしれませんが、あなただけ.... 'を削除することはできませんがどこでAddedDateがnullではないのですか? – Lamak

+0

私がやっていることはさらに奇妙です。私はいくつかのPlanId(addeddate = nullといくつかのケースでは実際の日付)に対して複数の値を持っています。 PlanID orderBy AddedDate ASCによってパーティションを追加するときに、addeddateがnullでない場合、実際にMINの日付を取得する必要があるときに、NULL値をすべてプルアップするようです。なぜこれが起こっているのか分かりません。私がする必要があるのは、基本的にdateがNULLのときに指定し、それを1/1/2016にすることです。それはすべてうまくいくでしょう。データは何千ものうちの1レコードだけではありません。 – FatBoySlim7

+1

のように、 'OVER(PARTITION BY PlanId ORDER BY ISNULL(AddedDate、GETDATE())')を使用して、 'AddedDateがnullでない場所'を削除してください。 – Lamak

答えて

1

AddedDateGETDATE()し、「大きな」することができない場合は、ISNULL(AddedDate,GETDATE()))を使用してwhere AddedDate is not null条件削除することができます。

Insert into tempIntake(Pop, PlanID, PopFull, ApptDate, 1stAppt, Followup, Rn, UserID) 
    select 
     Pop, PlanID, PopFull, InterviewDate, 1stAppt, Followup, rn, @UserID 
    from 
     (Select 
      *, 
      row_number() over (partition by PlanID order BY ISNULL(AddedDate,GETDATE())) as rn 
     from 
      VInfo) t 
    where 
     rn = 1 
     and interviewdate >= @fromDate 
     and interviewDate <= @toDate 
+0

簡単な質問 - IsnuLL(addedDate、GetDate())descでPlanID順にパーティション化すると正しい結果が得られないのですが、rn - 私はこれらのすべてのnull値を取得します - theres何かが起こっている。あなたがそれを表示する方法はASCのために働いていますが、私がDESCによって分割するとき - 私は奇妙なデータを取得します – FatBoySlim7

+1

@ FatBoySlim7 'AddedDate'を' GETDATE() 'に置き換えているので、 DESC'あなたはそれらの 'NULL'sを最初に得るでしょう – Lamak