this questionで使用されるメソッドを複製する方法があるかどうかは知っていますか?サブクエリのエイリアスを使用してt-SQLの別のフィールドで計算を実行しますか?別のフィールドの計算でエイリアスを使用する方法
私は、MS SQL Expressの次のクエリのために同じ構文を使用してみましたし、下記のエラーました:
DECLARE @PracticeID INT
DECLARE @Date1 date
DECLARE @Date2 date
SET @PracticeID = 11015
SET @Date1 = '2017-06-01'
SET @Date2 = '2017-09-01'
SELECT prtc.PracticeName ,COUNT(CASE WHEN udi.DevicePlatform = 'iOS' THEN 1 ELSE NULL END) iOSLogins,
COUNT(CASE WHEN udi.DevicePlatform = 'Android' THEN 1 ELSE NULL END) AndroidLogins,
(SELECT COUNT(*)
FROM UserEvent UE
WHERE UE.EventTypeID = 1 AND
UE.PracticeID = au.PracticeID AND
(UE.EventDate BETWEEN @Date1 and @Date2)
) TotalNumberLogins,
(SELECT TotalNumberofLogins) - ((SELECT iOSLogins) + (SELECT AndroidLogins)) DesktopLogins
FROM UserDeviceInfo UDI JOIN
AppUser AU ON udi.UserID = au.UserID JOIN
Practice PRTC ON au.PracticeID = prtc.PracticeID
WHERE au.PracticeID = @PracticeID AND
(udi.Created BETWEEN @Date1 AND @Date2)
GROUP BY prtc.PracticeName, au.PracticeID
メッセージ207、レベル16、状態1、行17無効な列名 「をTotalNumberofLogins 'メッセージ207、レベル16、状態1、行17無効な 列名 'iOSLogins'。メッセージ207、レベル16、状態1、行17無効な 列名 'AndroidLogins'。
違いはありますが、エイリアスを引用符と括弧で入れてみてみました。
私は、エイリアスの代わりに変数と同じ値を使用して計算を実行し、テーブルにそれらを挿入することによって、別の方法から望ましい結果を得ることができました。
しかし、このクエリは冗長で、将来の使用のために参照された質問の動作を複製する方法があるかどうかを知りたいと思います。
ご協力いただきありがとうございます。
あなたの第二の提案は、私は正確な答えのタイプだった:
また、一回以上のテーブルが関与している。このため大きな必要性を見ることができます探していた一束のAaronに感謝、あなたはすばらしい助けをしてきました。副次的な理由として、 'a'テーブルエイリアスを削除すると、クエリが失敗するのはなぜですか? –
@ W.Harrお手伝いします。エイリアスの説明を自分の答えに加えましたが、コメントとして書き込むには時間がかかりすぎました。簡単な答えは、結果セットから擬似テーブルを作成することです.SQL Serverでは、テーブルを参照できるようにテーブルの名前を付ける必要があります。 –
徹底的に説明していただきありがとうございます –