2013-04-04 64 views
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)的差异。

    DATE1等于DATE NOW(2013年4月4日)如果CaseNo未在现有PostMeds.dbo.tblpms

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

    OR ELSEIF MAX(med_stateff)为空或线没有现有,DATE1也将等于DATE NOW(2013年4月4日)

    DATE2等于cgoInceptionDate如果DatePIConsult是NULL

    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_state的值(w/c与med_stat对齐)是最大值WHERE(或考虑)CaseNo等于我的特定SUBPRIMARYKEY的值。在获得该值后,我必须检查该值是否等于某个单词('FIT'),之后我可以对我的代码进行必要的调整。

我真的希望有人可以帮助我整理了这一点..在此先感谢你们..

+0

您如何为SX58-Q提供133? – 2013-04-04 01:55:35

+0

ok .. ill编辑我的文章,并将其添加到底部 – 2013-04-04 01:56:08

+0

我在底部之前添加了解释..谢谢@AaronBertrand – 2013-04-04 02:05:43

回答

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因为我不知道你是如何得到你想要的结果显示顺序。

+0

好的..即时消息检查..谢谢..让我回复你,一旦我确认其正确性 – 2013-04-04 02:34:59

+0

嗨亚伦,有什么问题..我试图添加DATE1在我的选择语句,它只得到日期现在(全部'4/4/2013')..即时通讯使用getdate() – 2013-04-04 02:59:49

+0

无法理解你做了什么或者它是如何从模糊的评论出错的,对不起。看到这个[SQLfiddle](http://sqlfiddle.com/#!3/8807f/1)并以你想改变上面的方式改变查询,也许我会有一些想法你想要什么要做什么以及为什么你需要改变它。 – 2013-04-04 03:00:45