我在创建查询时遇到问题。但在我问你之前,请看看我需要使用的三个表:
表1 // AdminInvoices
[AdminId] [InvoiceId] (...)
Table_2 // AdminClientSystem
[AdminId] [ClientId] (...)
Table_3 // ClientData
[CompanyId] [CompanyName] (...)
关于表格的更多说明:
TABLE_1
InvoiceId一般不是唯一的,但对公司来说是唯一的:
AdminId InvoiceId
16 1
14 1
24 1
3149 1
3150 1
3159 2
3157 2
3150 2
3149 2
3145 2
16 3
14 3
24 3
2015 3
3149 3
3159 4
3157 4
3150 4
TABLE_2:
AdminId CompanyId
3 1
3 1
3 1
3 1
3 1
3 1
3 2
3 2
3 3
3 4
3 4
3 4
3 9
3 9
3 9
3 9
3 9
3 9
3 9
3 9
3 13
3 13
3 13
TABLE_3:
CompanyId CompanyName
1 C1
2 C2
3 C3
9 C4
13 C5
我在使用join创建正确的查询时遇到问题。在我的情况下,我总是得到冗余数据作为答案。我想得到的是每个公司的发票数量。
让我们说我确信C1生成了100张发票,C2 50和C3 200.无论我做什么查询,数字大约是两倍甚至更大 - 其他表中的某些行被复制到一般结果
我尝试过:
SELECT CL.CompanyName, count([IncentiveId])
FROM AdminInvoices
INNER JOIN AdminClientSystem
ON AdminInvoices.AdminId = AdminClientSystem.AdminId
INNER JOIN ClientData
ON AdminClientSystem.CompanyId = ClientData.CompanyId
GROUP BY CL.CompanyName
ORDER BY CL.CompanyName ASC
提前感谢您的帮助! :)
答案 0 :(得分:3)
就我在您的示例中看到的而言,AdminClientSystem有许多冗余条目,因此对于一个adminid,您有几个带有公司ID的条目。不确定表是否有这样的数据,或者你刚发布了错误的信息。 要仅使用它们一次,您可以使用子查询,例如:
SELECT CL.CompanyName, count([IncentiveId])
FROM AdminInvoices
INNER JOIN (select distinct AdminId, CompanyId from AdminClientSystem) as ACS
ON AdminInvoices.AdminId = ACS.AdminId
INNER JOIN ClientData
ON ACS.CompanyId= ClientData.CompanyId
GROUP BY CL.CompanyName
ORDER BY CL.CompanyName ASC
答案 1 :(得分:0)
试试这个......
SELECT CL.CompanyName, count([AdminInvoices.InvoiceId])
FROM AdminInvoices
INNER JOIN
(select distinct(AdminId),CompanyId
from AdminClientSystem
WHERE CompanyId IN
(SELECT DISTINCT CompanyId FROM ClientData)) as ACS
ON AdminInvoices.AdminId = ACS.AdminId
INNER JOIN ClientData as CL
ON ACS.CompanyId= CL.CompanyId
GROUP BY CL.CompanyName