3

我有两个来自不同表的日期(相同的参考),当 Table2 的 STATUS 等于“STOP”或“MAX”并将其放在摘要中时,我需要得到差异。我知道如何减去日期,但只能从同一张表中减去。请参阅下文以进一步解释我的情况,因为我很难完成代码。

Table1

REF#    BEGINDATE   
----   ----------- 
ABC1    12/31/2012   
CDE9    01/01/2013
EFG2    02/01/2013
MJK8    02/03/2013

 

Table2

REF#     ENDDATE      STATUS
----    ---------     ------
CDE9    03/31/2013    STOP
MJK8    05/01/2013    MAX
EFG2    02/05/2013
ABC1    02/21/2013    STOP

这是总结结果:

STATUS   30 below   30 to 79   80 and up
------   --------   --------   ---------
STOP                    1          1
MAX                                1

这些是附加信息:

一个。Table2 中的 REF# 始终存在于 Table1 中(这使得 Table1 作为我的主表)

湾。摘要结果中的 3 列(以下 30 列,30 到 79 等)是每个状态的行数。

到目前为止,这就是我所拥有的:

SELECT STATUS, sum(case when *THIS IS WHERE IM STUCK* then 1 else 0 end) as 30 below,
sum(case when *THIS IS WHERE IM STUCK TOO* then 1 else 0 end) as 30 to 79,
sum(case when *NEED HELP IN THIS TOO* then 1 else 0 end) as 80 and up from Table2?
GROUP BY STATUS

我希望有人可以帮助我如何解决这个问题,在此先感谢您的快速帮助。=)

4

3 回答 3

2

你需要像 DateDiff(day, Date1, Date2) ...

SELECT t1.REF, 
  SUM(CASE WHEN DateDiff(day, t1.StartDate, t2.EndDate) < 30 THEN 1 ELSE 0 END)
FROM table1 t1 JOIN table2 t2 ON t1.REF = t2.REF
GROUP BY t1.REF
WHERE t2.STATUS in ('MAX', 'STOP')
于 2013-03-06T01:10:34.107 回答
1

你需要的是一个加入。

SELECT t2.STATUS --SUM(case statement here  t1.BEGINDATE, t2.ENDDATE)
FROM dbo.Table1 AS t1
JOIN dbo.Table2 AS t2
ON t1.[REF#] = t2.[REF#]
AND t2.STATUS IN (''STOP','MAX')
GROUP BY t2.STATUS;

从那里您可以在两个日期之间进行必要的计算。

有关加入结帐的更多信息一个月的加入

这 3 个CASE语句必须看起来像这样:

SUM(CASE WHEN DATEDIFF(DAY,t1.BEGINDATE,t2.ENDDATE) BETWEEN 30 AND 79 THEN 1 ELSE 0 END)
于 2013-03-06T01:19:06.853 回答
1

试试这个我朋友!

SELECT table_1.REF, 

SUM(CASE WHEN DateDiff(day, table_1.StartDate, table_2.EndDate) < 30 THEN 1 ELSE 0 END)
FROM table1 table_1 
JOIN table2 table_2 ON table_1.REF = table_2.REF
GROUP BY table_1.REF

WHERE table_2.STATUS in ('max', 'stop')
于 2013-08-28T03:16:45.300 回答