我希望有人能帮我解决这个问题。
下面是我的表格和代码(由于一件事情,这有点不对..),让我把它分开来进一步解释我的情况..
假设我有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'),之后我可以对我的代码进行必要的调整。
我真的希望有人能帮助我解决这个问题..先谢谢你们......
答案 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
,因为我不知道您如何获得所需结果中显示的订单。