0

DOB が存在する別のテーブル (Employee) からテーブル (Upcoming Birthdays) を入力したいのですが、DOB が渡されたときにテーブルのデータを削除する必要があります。私のテーブル(今後の誕生日)の属性は、「Employee_Code」、「Name」、「DOB」、「Days_left_to_Birthday」、「Mobile_Number」、「Email」です。

ここで、「Days_left_to_Birthday」が任意の行で「0」になると、その行はテーブルから自動的に削除されます (今後の誕生日)。

私はそれを探しましたが、見つけることができませんでした。

4

1 に答える 1

0

次の例は、誕生日が 1 か月以内の従業員を示しています。

CREATE TABLE dbo.Employees 
(
    EmployeesID INT IDENTITY(1,1) PRIMARY KEY,
    FirstName   NVARCHAR(50) NOT NULL,
    LastName    NVARCHAR(50) NOT NULL,
    Birthday    DATETIME NOT NULL
);
INSERT  dbo.Employees (FirstName, LastName, Birthday)
VALUES  (N'A', N'X', '19950114'), 
        (N'B', N'Y', '19900915'),
        (N'D', N'Z', '19901016'),       
        (N'E', N'T', '19901117'),
        (N'F', N'V', '19891218');
GO      

CREATE VIEW dbo.vEmployeeWithNextBirthday
AS
SELECT  e.*,
        CASE
            WHEN    e.NextBirthday1 > GETDATE() 
            AND     e.NextBirthday1 <= DATEADD(MONTH, +1, GETDATE()) THEN   e.NextBirthday1
            WHEN    e.NextBirthday2 > GETDATE() 
            AND     e.NextBirthday2 <= DATEADD(MONTH, +1, GETDATE()) THEN   e.NextBirthday2
        END AS NextBirthday
FROM
(       
SELECT  e.EmployeesID, e.FirstName, e.LastName, e.Birthday,
        DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) - DATEDIFF(YEAR, 0, e.Birthday), e.Birthday) AS NextBirthday1,
        DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) - DATEDIFF(YEAR, 0, e.Birthday) + 1, e.Birthday) AS NextBirthday2
FROM    dbo.Employees e
) src
GO  

SELECT * FROM dbo.vEmployeeWithNextBirthday;
GO

結果:

EmployeesID FirstName LastName Birthday   NextBirthday1 NextBirthday2 NextBirthday
----------- --------- -------- ---------- ------------- ------------- -----------------------
1           A         X        1995-01-14 2013-01-14    2014-01-14    NULL
2           B         Y        1990-09-15 2013-09-15    2014-09-15    NULL
3           D         Z        1990-10-16 2013-10-16    2014-10-16    2013-10-16 -- <-- My current date is 2013-09-29
4           E         T        1990-11-17 2013-11-17    2014-11-17    NULL
5           F         V        1989-12-18 2013-12-18    2014-12-18    NULL

このクエリは、誕生日が 1 か月以内の従業員を表示します。

SELECT * FROM dbo.vEmployeeWithNextBirthday v
WHERE v.NextBirthday IS NOT NULL;
GO

別の現在の日付を使用した別のテスト:

DECLARE @CurrentDate DATETIME;
SET     @CurrentDate = '20131215';

SELECT  *,
        CASE
            WHEN    src.NextBirthday1 > @CurrentDate 
            AND     src.NextBirthday1 <= DATEADD(MONTH, +1, @CurrentDate) THEN  src.NextBirthday1
            WHEN    src.NextBirthday2 > @CurrentDate 
            AND     src.NextBirthday2 <= DATEADD(MONTH, +1, @CurrentDate) THEN  src.NextBirthday2
        END AS NextBirthday
FROM
(       
SELECT  *,
        DATEADD(YEAR, DATEDIFF(YEAR, 0, @CurrentDate) - DATEDIFF(YEAR, 0, e.Birthday), e.Birthday) AS NextBirthday1,
        DATEADD(YEAR, DATEDIFF(YEAR, 0, @CurrentDate) - DATEDIFF(YEAR, 0, e.Birthday) + 1, e.Birthday) AS NextBirthday2
FROM    dbo.Employees e
) src
于 2013-09-29T11:46:29.427 に答える