【问题标题】:CASE when statement SQL ServerCASE when 语句 SQL Server
【发布时间】:2016-07-08 10:42:27
【问题描述】:

我正在开发一个存储过程,但是,当我运行它时,我丢失了一些数据。我知道原因,但我很难弄清楚......这是我的代码:

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

所以我在这里尝试做的是......对于某些 PLANID,我没有添加日期。因为我正在按 AdditionalDate 进行过滤,并且如果为 null - 此数据不会出现 - 即使我需要显示它。在这种情况下,我想通过这种方式将其设置为像 '1/1/2016' 这样的虚拟日期,当实际的 AddedDate 在表中可用时,它将被使用而不是虚拟日期。

【问题讨论】:

  • 这听起来可能很奇怪,但你不能……删除where AddedDate is not null吗?
  • 我所做的更奇怪。对于某些 PlanId,我有多个值(在某些情况下,addeddate = null 和实际日期)。当我按 PlanID orderBy addedDate ASC 分区时,没有 where addeddate 不为空,我似乎提取了所有 NULL 值 - 当我实际上需要提取 MIN 日期时。我不知道为什么会这样。我需要做的基本上是指定日期何时为 NULL,然后将其设为 2016 年 1 月 1 日——一切都会好的。数据不会出现在数千条记录中
  • 好吧,然后使用OVER(PARTITION BY PlanId ORDER BY ISNULL(AddedDate,GETDATE()))并删除where AddedDate is not null
  • 张贴作为答案,我会接受。谢谢

标签: sql-server select stored-procedures case


【解决方案1】:

如果AddedDate 不能“更大”然后GETDATE(),您可以使用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

【讨论】:

  • 快速问题 - 如果我按 PlanID 顺序按 IsnuLL(addDate,GetDate()) desc) 作为 rn 进行分区,为什么我得不到正确的结果 - 我得到所有这些空值 - 除非我包括其中 addeddate 不为空 - 发生了一些事情。您显示它的方式适用于 ASC,但是当我按 DESC 分区时 - 我得到奇怪的数据
  • @FatBoySlim7 我的意思是,这很明显,因为您将AddedDate 替换为GETDATE(),如果您订购它们DESC,您将首先获得NULLs
猜你喜欢
  • 2011-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多