我正在编写一个看起来过于复杂的查询。 我需要这样的东西:
SELECT (A - B - C) * -1
FROM
(
SELECT(SELECT T1.ACCOUNT_BALANCE FROM TABLE1A T1 WHERE T1.ACCOUNT_BALANCE > 3.00 ) AS A,
SELECT(SELECT T2.ACCOUNT_BALANCE FROM TABLE1A T2 WHERE T2.EFFDT < T1.EFFDT ) AS B,
SELECT(SELECT T3.ACCOUNT_BALANCE FROM TABLE1A T3 WHERE T3.EFFDT < T1.EFFDT AND ...) AS C
) AS SOMETHING_A
但B和C都依赖于子查询A.或者换句话说,B和C的EFFDT必须<&lt;对A的影响 我不相信你可以写
WHERE B.EFFDT < T1.EFFDT
编辑:它来自同一张桌子。 如下所示:
ACCOUNT_NUM-----EFFDT------ACCOUNT_BALANCE
这够了吗?
答案 0 :(得分:0)
在大多数DBMS中,您可以使用常见的表表达式执行此操作。
例如
WITH a AS (SELECT c1 FROM table1)
, b AS (SELECT c1 from a)
SELECT * FROM a JOIN b ON (...)
如果这不能回答您的问题,那么您应该更明确地了解您要完成的任务。即,至少包括样本数据和期望的结果。
答案 1 :(得分:0)
您正在寻找的是外部申请。
SELECT (A.qty - B.qty - C.qty) * -1
FROM
(SELECT ACCOUNT_BALANCE FROM TABLE1A T1.... ) AS A,
outer apply(SELECT ... FROM ... WHERE things.fromA) AS B,
outer apply(SELECT ... FROM ... WHERE things.fromAorB) AS C
基本上,外部应用允许您使用WHERE子句为行选择记录,这些子句使用已在同一行中返回的记录。
答案 2 :(得分:0)
我能想象的最接近查询的是这样的:
SELECT (t1.ACCOUNT_BALANCE -
(SELECT SUM(T2.ACCOUNT_BALANCE)
FROM TABLE1A T2
WHERE T2.EFFDT < T1.EFFDT
) -
(SELECT SUM(T3.ACCOUNT_BALANCE)
FROM TABLE1A T3
WHERE T3.EFFDT < T1.EFFDT . . .
)
) * -1
FROM table1a t1;
然而,这似乎与人们真正想要的真实数据库相差甚远。例如,帐户上没有相关性,这似乎可能是基于帐户的结构。
因为这个问题已经有了答案,我建议你用样本数据和期望的结果提出另一个问题。您还应该用英语解释 您想要的逻辑。示例代码也很好,但应该补充说明代码应该做什么。另外,SQL Fiddle非常有用。
我不建议你编辑这个问题,因为它已经有了答案,编辑可能会使它们失效 - 绘制未来的downvotes。