個人が過去 3 年以内に特定のコースを「終了」したかどうかを 1 行で示すデータが必要です。
これは私の既存のテーブルと目的のテーブルです (まだ画像を投稿できないため、このリンクが機能することを願っています!): http://i.stack.imgur.com/c8oJO.png
私はこのコードを試しました:
SELECT DISTINCT
EN,
(First_Name + ' ' + Last_Name) as Name,
First_Aid = CASE
WHEN Course = 'First Aid'
and Status = 'Finished'
and Course_Start_Date > DATEADD(day, -1095, GETDATE())
THEN 'F'
ELSE 'Nope'
END,
Manual_Handling = CASE
WHEN Course = 'Manual Handling'
and Status = 'Finished'
and Course_Start_Date > DATEADD(day, -1095, GETDATE())
THEN 'F'
ELSE 'Nope'
END,
Fire_Safety = CASE
WHEN Course = 'Fire Safety'
and Status = 'Finished'
and Course_Start_Date > DATEADD(day, -1095, GETDATE())
THEN 'F'
ELSE 'Nope'
END
into MyTraining
FROM Learning_History`
これにより、正確な結果が生成されますが、CASE ステートメントごとに個別の行が作成されます (さらに、すべての「いいえ」の結果を含む余分な行が追加されます)。だから私はこのコードを試しました:
SELECT
EN,
(First_Name + ' ' + Last_Name) as Name,
First_Aid =MAX(CASE
WHEN Course = 'First Aid'
and Status = 'Finished'
and Course_Start_Date > DATEADD(day, -1095, GETDATE())
THEN 'F'
ELSE 'Nope'
END),
Manual_Handling =MAX(CASE
WHEN Course = 'Manual Handling'
and Status = 'Finished'
and Course_Start_Date > DATEADD(day, -1095, GETDATE())
THEN 'F'
ELSE 'Nope'
END),
Fire_Safety =MAX(CASE
WHEN Course = 'Fire Safety'
and Status = 'Finished'
and Course_Start_Date > DATEADD(day, -1095, GETDATE())
THEN 'F'
ELSE 'Nope'
END)
into MyTraining
FROM Learning_History
Group By EN,First_Name, Last_Name
このコードは1 行を生成しますが、結果はすべて「いいえ」です。
私はSQLの初心者なので、これについてはあまり理解していません(ほとんどのコードをグーグルで検索しただけです)(単純なエラーをいくつか犯した可能性があります)。ピボットテーブルが良いと思います - しかし、私はそれらについて理解することができません...