SQL,具有从属子查询的算术

时间:2015-01-08 20:41:16

标签: sql math subquery

我正在编写一个看起来过于复杂的查询。 我需要这样的东西:

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

这够了吗?

3 个答案:

答案 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。