2013-04-04 55 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

相關問題