【发布时间】:2017-09-28 15:06:18
【问题描述】:
有人知道是否有办法复制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 行无效的列名 “登录总数”。消息 207,级别 16,状态 1,第 17 行无效 列名“iOSLogins”。消息 207,级别 16,状态 1,第 17 行无效 列名“AndroidLogins”。
并不是说它会有所作为,但我确实尝试将别名放在引号和括号中,但无济于事。
我确实设法通过使用与变量相同的值而不是别名的值来执行计算,然后将它们插入到表中,从而从另一种方法中获得所需的结果。
但是,该查询很冗长,我想知道是否有任何方法可以复制引用问题中的行为以供将来使用。
感谢您提供的任何帮助。
【问题讨论】: