【发布时间】:2014-07-31 06:36:45
【问题描述】:
我有一个相当简单的问题,但我无法解决。我有两个表,一个帐户表和一个客户表。帐户表中的每一行都是唯一的,但有多个客户可以与一个帐户 ID 相关联。例如,帐户 id 101 与客户表中的 id 1 和 2 相关联。
我想要做的是连接这两个表,以便我可以计算给定日期期间帐户表中的行数。但是,我也想只选择客户表中 cust 值为 A 的那些帐户。所以我需要加入这两个表,并且我正在努力结合连接和不同的方面。
Acct table =
account ...
101 ...
102 ...
103 ...
104 ...
105 ...
Customer table =
id prim_acct cust
1 101 A
1 101 A
2 102 A
3 103 A
3 103 A
3 103 A
4 104 R
5 105 R
我尝试过的一些不连贯的事情。由于数据量很大,我只是尝试与前 10 名一起工作,并计算可以将每个帐户隔离为 1 个的计数。
;with CTE as
(
SELECT TOP 10 * FROM dbo.CL_CUSTOMER AS cus
WHERE cus.CUSTOMER_STATUS = 'A'
)
SELECT ac.ACCOUNT_NUMBER, COUNT(*) AS ac
GROUP BY ac.ACCOUNT_NUMBER FROM CTE;
SELECT TOP 10 cus.PRIMARY_ACCOUNT_NUMBER, COUNT(*) FROM dbo.CL_ACCOUNT AS ac
INNER JOIN (SELECT DISTINCT ACCOUNT_NUMBER FROM dbo.CL_CUSTOMER WHERE CUSTOMER_STATUS = 'A')
dbo.CL_CUSTOMER AS cus ON ac.ACCOUNT_NUMBER = cus.PRIMARY_ACCOUNT_NUMBER
GROUP BY cus.PRIMARY_ACCOUNT_NUMBER
HAVING COUNT(*) >= 2;
【问题讨论】:
-
只是一个提示,但是对于您想要查询的大表,将一些数据抽取到一个更小、更快的表中并针对它进行测试。 FWIW。
标签: sql sql-server