私の質問
MERGE
あるテーブルから別のテーブルに結果を取得するために、クエリ内でクエリを実行しようとしています。これは、1 つの小さな問題を除けば、すべて正常に機能します...
テーブルからデータを取得するために実行されるクエリは、 という変数に依存します@User_ID
。
の場合@User_ID
はNULL
サブクエリ A を実行し、そうでない場合はサブクエリ B を実行します。
私が抱えている問題はIF
、サブクエリ内に を配置する方法がわからないことです...どうすればこれを行うことができますか?
私が試したこと...
これは私がこれまでに持っているものです:
これは機能する可能性がありますが、2012 ではなく SQL Server 2008 を実行しているため (私が思うに)、このIIF
機能は利用できないと思うので、これを達成するには別の方法が必要です。
-- Get the relevant logins for the past 12 weeks and insert
-- them into the temporary table where the week number is the same
MERGE INTO #Number_Of_Logins AS NOL
USING (
SELECT IIF (ISNULL(@User_ID,0), (
SELECT
Year(UA.Audit_When) AS Year_Num,
DatePart(wk, UA.Audit_When) AS Week_Number,
Count(*) AS Num_Logins
FROM User_Auditing UA
WHERE Audit_Type = 'SYSLI'
AND User_ID = @User_ID
AND DATEDIFF(wk, Audit_When, GETDATE()) <= 11
GROUP BY Year(Audit_When), DatePart(wk, Audit_When)
),
(
SELECT
Year(UA.Audit_When) AS Year_Num,
DatePart(wk, UA.Audit_When) AS Week_Number,
Count(*) AS Num_Logins
FROM User_Auditing UA
JOIN User_Profiles UP ON UA.User_ID = UP.User_ID
WHERE UA.Audit_Type = 'SYSLI'
AND UP.Company_ID = @Company_ID
AND DATEDIFF(wk, UA.Audit_When, GETDATE()) <= 11
GROUP BY Year(Audit_When), DatePart(wk, UA.Audit_When)
)
)
) AS TEST
ON NOL.Week_Number = TEST.Week_Number
WHEN MATCHED THEN
UPDATE
SET Number_Of_Logins = Num_Logins;
アップデート
も使用してCASE
みましたが、次のエラーが表示されます。
「THEN」の近くで、条件が予想されるコンテキストで指定された非ブール型の式。