SQL新手在这里。所以,我想从一个表中返回记录,其中至少有一个记录符合某个标准。
我们有一个程序应该在新发票之前将现金分配给旧发票。它不是,我需要找到受影响的记录。
如果有,我想要退回帐户的所有记录;
<开放量> 0表示比开户金额为零或小于总金额的同一帐户的记录更旧的记录。
因此,在下面的示例中,帐户A1已正确分配。我希望我的查询返回帐户B2和C3的所有记录。
我想我需要使用HAVING和可能的子查询的一些组合,但它让我感到困惑!任何帮助是极大的赞赏!谢谢。
UKID ACCOUNT DATE OPEN_AMOUNT GROSS_AMOUNT
1 A1 12/03/14 100 100
2 A1 12/02/14 0 150
3 B2 21/03/14 0 100
4 B2 21/02/14 100 100
5 C3 01/03/14 50 100
6 C3 01/02/14 50 100
答案 0 :(得分:1)
你应该可以这样做:
SELECT *
FROM YourTable
WHERE ACCOUNT IN (
SELECT DISTINCT ACCOUNT
FROM YourTable
WHERE OPEN_AMOUNT <> 0
)
您需要第二个查询来确定所有具有非零开放金额的帐户。然后使用该列表,您可以获得与其相关的所有记录。
答案 1 :(得分:0)
像
这样的东西select *
from mytable
where account in (select ext.account
from mytable ext
inner join (SELECT account, date
FROM mytable ext
WHERE OPEN_AMOUNT = 0
or OPEN_AMOUNT < gross_amount) sub
on ext.account = sub.account
and ext.date < sub.date
where open_amount > 0)
应该这样做。
如果你需要更像连锁控制的东西,它会更加难以理解。
您能指定您使用的数据库吗?某些特定于数据库的功能实际上可以提供很多帮助。