如何在当前查询中添加查询变量?

时间:2013-04-04 01:53:27

标签: sql sql-server sql-server-2008 tsql

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

下面是我的表格和代码(由于一件事情,这有点不对..),让我把它分开来进一步解释我的情况..

假设我有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等于(med_statff的最大值,其中med_stat类似'%FIT%')特定CaseNo

    OR ELSEIF max(med_stateff)为null或行不存在,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对齐)是最大值WHERE(或考虑)CaseNo等于我的特定SUBPRIMARYKEY。在我得到该值之后,我必须检查该值是否等于某个单词('FIT'),之后我可以对我的代码进行必要的调整。

我真的希望有人能帮助我解决这个问题..先谢谢你们......

1 个答案:

答案 0 :(得分: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,因为我不知道您如何获得所需结果中显示的订单。