0

我希望有人能帮我解决这个问题。

下面是我的表格和代码(因为一件事有点错误..),让我一个一个部分来进一步解释我的情况..

假设我有一张 Pandimandata2002.dbo.tblCrew 的表:

CaseNo    DatePIConsult    cgoInceptionDate
------    -------------    ----------------
TR12-A    12/03/2012       10/11/2012
TR13-S    11/15/2012       09/15/2012
PO09-B                     08/20/2012
SX58-Q    11/22/2012       11/01/2012
BR88-W    10/05/2012       11/05/2012

我有 PostMeds.dbo.tblpms 的这些数据:

CaseNo    med_stat    med_stateff
------    --------    -----------
BR88-W    FIT         12/01/2012
TR12-A    UNDERTX     03/13/2013
TR13-S    UNDERTX     03/10/2013 
PO09-B    UNDERTX     01/25/2013
TR13-S    FIT         04/01/2013
BR88-W    UNDERTX     11/17/2012

从那里,我想要这个:

CaseNo    DIFF2
------    -----    
BR88-W    57         
TR12-A    122      
PO09-B    227     
TR13-S    137     
SX58-Q    133
  • DIFF2 是两个日期的差值(例如,DATE1-DATE2)。

    如果 PostMeds.dbo.tblpms 中不存在 CaseNo,则 DATE1 等于 DATE NOW (4/4/2013)

    DATE1 等于特定 CaseNo 的(med_stateff 的最大值,其中 med_stat 类似于 '%FIT%')

    或 ELSEIF max(med_stateff) 为空或行不存在,DATE1 也将等于 DATE NOW (4/4/2013)

    如果 DatePIConsult 为 NULL,则 DATE2 等于 cgoInceptionDate

    ELSE DATE2 等于 DatePIConsult

以下是我当前的查询:

SELECT
     t1.CaseNo,
     (SELECT
          CASE WHEN MAX(cast(o.med_stateff as datetime)) IS NULL THEN DATEDIFF(DAY,
               CASE WHEN t1.DatePIConsult IS NULL THEN t1.cgoInceptionDate
               ELSE t1.DatePIConsult END, GETDATE()) 
          WHEN ----(select o.med_stat --------)
       DATEDIFF(DAY,
            CASE WHEN t1.DatePIConsult IS NULL THEN t1.cgoInceptionDate
            ELSE t1.DatePIConsult END,
       MAX(cast(o.med_stateff as datetime))) END AS DIFF2

       FROM PostMeds.dbo.tblpms o

       WHERE t1.CaseNo COLLATE DATABASE_DEFAULT = o.CaseNo COLLATE DATABASE_DEFAULT) AS DIFF2

FROM Pandimandata2002.dbo.tblCrew t1

我的代码的错误部分在 DIFF2 的条件下 ..

在那里,我想添加条件以获取 med_stat 的值,其中 med_stateff 的值(w/c 与 med_stat 对齐)是最大值,其中(或考虑)CaseNo 等于我的特定 SUBPRIMARYKEY。获得该值后,我必须检查该值是否等于某个单词('FIT'),然后我可以对我的代码进行必要的调整。

我真的希望有人能帮我解决这个问题..提前感谢你们..

4

1 回答 1

2

我想我已经将你的单词问题收集到一个查询中,至少可以得到你想要的结果。嗯,对我来说仍然是 4 月 3 日,以获得你想要的我使用的结果SYSUTCDATETIME()。您可能需要将其更改为SYSDATETIME()取决于您离伦敦的距离。

SELECT CaseNo, DIFF2 = DATEDIFF(DAY, DATE2, DATE1)
FROM
(
  SELECT 
    c.CaseNo,
    DATE1 = COALESCE(p.med_stateff, SYSUTCDATETIME()),
    DATE2 = COALESCE(c.DatePIConsult, c.cgoInceptionDate)
  FROM dbo.tblCrew AS c
  LEFT OUTER JOIN 
  (
    SELECT CaseNo, med_stateff = MAX(med_stateff)
      FROM dbo.tblpms 
      WHERE med_stat LIKE '%FIT%'
      GROUP BY CaseNo
  ) AS p
  ON c.CaseNo COLLATE DATABASE_DEFAULT = p.CaseNo COLLATE DATABASE_DEFAULT
) AS x;

结果:

CaseNo   DIFF2
------   -----
TR12-A   122
TR13-S   137
PO09-B   227
SX58-Q   133
BR88-W   57

您必须添加 ,ORDER BY因为我不知道您如何获得在所需结果中显示的顺序。

于 2013-04-04T02:28:44.490 回答