例:
SELECT
(SELECT SUM(...) FROM ...) as turnover,
(SELECT SUM(...) FROM ...) as cost,
turnover - cost as profit
Run Code Online (Sandbox Code Playgroud)
当然这是无效的(至少在Postgres中)但如何在查询中实现相同而不重写子查询两次?
我有如下查询
select columns
from (select columns1
from result_set
where condition_common and condition1) as subset1
join
(select columns2
from result_set
where condition_common and condition2) as subset2
on subset1.somekey = subset2.somekey
Run Code Online (Sandbox Code Playgroud)
我想以某种方式重用
select columns
from result_set
where condition_common
Run Code Online (Sandbox Code Playgroud)
我已经过度简化了上面的查询,但上面的选择实际上是庞大而复杂的.我不想承担确保两者同步的负担
我没有任何以编程方式重用它的方法.排除了T-SQL.我只能写简单的查询.这是应用限制.
有没有办法在单个语句中重用相同的子查询
我有一个子查询(LastActivityOn),我想在三个地方使用,我的投影(SELECTed输出),ORDER BY和WHERE子句.
SELECT TOP 175
(SELECT MAX(ActivityDate) FROM (VALUES
(UserRegistration.CreatedOn),
(UserRegistration.ActivatedOn),
(UserRegistration.LastLoginOn),
(UserRegistration.UpdatedOn),
(UserProfile.LastPostedOn)) AS AllDates(ActivityDate)) LastActivityOn,
UserRegistration.FirstName,
UserRegistration.LastName,
[15 more columns of various calculated distances, coalesces, etc...]
FROM
UserRegistration
INNER JOIN UserProfile ON UserRegistration.Id = UserProfile.RegistrationId
INNER JOIN (
SELECT PostalCode, GeoCenter, PrimaryCity, StateOrProvince
FROM PostalCodes
WHERE @OriginPostalCode IS NULL OR PostalCodes.GeoCenter.STDistance(@OriginPoint) < @WithinMeters
) AS ProximalPostalCodes ON ProximalPostalCodes.PostalCode = UserRegistration.PostalCode
[7 more joins including full-text queries]
WHERE
LastActivityOn > @OldestUserToSearch AND
[20 more lines of filtering …Run Code Online (Sandbox Code Playgroud)