从另一个具有多个结果的查询中获取SQL结果,并计算有多少个结果

quhf5bfb  于 2022-10-03  发布在  其他
关注(0)|答案(2)|浏览(209)

我有一个包含列IDSDate的数据库表。我需要知道是否有一定数量的行(从另一个表中预先确定的数量)满足在较大跨度范围内的每周之间的标准。假设是‘2021-11-29’和‘2022-03-01’(在这种情况下是12周)。所以结果会是这样的。

我使用此代码来获取DayStartDayEnd

declare @STARTDATE date;
declare @ENDDATE date;

set @STARTDATE = '2021-11-29';
set @ENDDATE = '2022-03-01';

with Nums as
(
    select 1 as NN
    union all
    select NN + 1 as NN
    from Nums
    where NN < 1000
)
select  
    dateadd(dd, NN, @STARTDATE) as DayStart, 
    dateadd(dd, NN + 6, @STARTDATE) as DayEnd
from 
    Nums
where 
    dateadd(dd, NN + 6, @STARTDATE) <= @ENDDATE
    and datepart(dw, dateadd(dd, NN, @STARTDATE)) = 1 
option (maxrecursion 0)

如有任何帮助,将不胜感激

flseospp

flseospp1#

如果我正确理解了您的问题,如果您已经设置了@STARTDATE和@ENDDATE,则可以执行以下操作:

SELECT SUM(CASE WHEN Date BETWEEN @STARTDATE AND @ENDDATE THEN 1 ELSE 0) END AS RowCount

它应该返回表中介于您传入开始日期和结束日期的日期范围之间的行数。

bis0qfac

bis0qfac2#

我选择使用类似上面的CTE表来获得我正在寻找的日期范围,将它们与我需要从数据中提取的细节交叉连接,然后我使用COUNT和LEFT JOIN将它们放在一个整齐的表中。

最初,我在使用交叉联接时遇到了麻烦,因为它只显示超过0行的日期范围。因为如果它有0行,就没有什么可以交叉连接到的。Left Join做到了这一点。我只需要在范围内保持连接,例如DATE>=DAYSTART和DATE<=DAYEND

相关问题