0

わかりにくかったら申し訳ありませんが、まとめるのは難しいです。

テーブルというHoliday名前のフィールドが 1 つあるhDate テーブルTimeSheettsDate,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 テーブル内の日付範囲内のすべてのレコードがタイムシート テーブルに存在し、コードに H 値が入力されていることを確認する必要があります。

したがって、渡された日付範囲が 12/24 ~ 12/30 の場合、12/26 のタイムシートにはデータが存在せず、12/25 にはコード W が含まれているため、結果は空になります。基本的に、これを行うには存在するクエリが必要です

4

1 に答える 1

0

次の SQL を試すことができます。左外部結合から code <> '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 に答える