0

对不起,如果这不是太清楚,但很难总结。

Holiday具有一个名为Table的字段的hDateTimeSheettsDate,Code

样本数据

   Holiday
   7/4/2012
   12/24/2012
   12/25/2012
   12/26/2012

样本数据

   TimeSheet
   12/27/2012,W
   12/24/2012,H
   12/25/2012,W

我需要根据日期范围验证 Holiday 表中日期范围之间的每条记录是否存在于 Timesheet 表中,并且它们具有为 Code 输入的 H 值

因此,如果传入的日期范围是 12/24-12/30,那么结果应该为空,因为 12/26 的时间表中不存在任何数据,并且 12/25 中有一个代码 W。所以基本上我需要一个存在查询来做到这一点

4

1 回答 1

0

您可以尝试以下 SQL。它从左外连接计算代码 <> 'H' 和 tsDate = null 的数量。如果计数 > 0,则返回 false。

DECLARE @Holiday TABLE
(
    hDate DATETIME NOT NULL
)

DECLARE @TimeSheet TABLE
(
    tsDate DATETIME, 
    Code NCHAR(1)
)

INSERT INTO @Holiday (hDate)
VALUES ('2012-07-04'), ('2012-12-24'), ('2012-12-25'), ('2012-12-26')

INSERT INTO @TimeSheet (tsDate, Code)
VALUES ('2012-12-27', 'W'), ('2012-12-24', 'H'), ('2012-12-25', 'W')

DECLARE @StartDate DATETIME = '2012-12-24'
DECLARE @EndDate DATETIME = '2012-12-30'

SELECT 
    CASE WHEN COUNT(1) = 0 THEN 'TRUE' ELSE 'FALSE' END AS 'BooleanResult'
FROM
    (
        SELECT hDate 
        FROM @Holiday 
        WHERE hDate BETWEEN @StartDate AND @EndDate
    ) H 
    LEFT JOIN @TimeSheet TS
    ON TS.tsDate = H.hDate
WHERE 
    TS.Code != 'H' OR TS.tsDate IS NULL and 'H' not in (select doecode from timesheet 
where timesheet.tsdate = TS.tsDate
于 2012-08-15T04:25:53.737 回答