SQL联接和组的问题
我有4个表,我正试图加入,然后分组数据。数据包括作业、发票和账目。我想在每个作业中生成每个帐户的总数 我有以下表格: 工作SQL联接和组的问题,sql,join,group-by,Sql,Join,Group By,我有4个表,我正试图加入,然后分组数据。数据包括作业、发票和账目。我想在每个作业中生成每个帐户的总数 我有以下表格: 工作 | ID | JobNumber | |----|-----------| | 1 | J200 | | 2 | J201 | | ID | InvoiceNumber | JobID | |----|---------------|-------| | 10 | I300 | 1 | | 11 | I301
| ID | JobNumber |
|----|-----------|
| 1 | J200 |
| 2 | J201 |
| ID | InvoiceNumber | JobID |
|----|---------------|-------|
| 10 | I300 | 1 |
| 11 | I301 | 2 |
| ID | InvoiceId | AccountID | Amount |
|----|-----------|-----------|--------|
| 23 | 10 | 40 | 200 |
| 24 | 10 | 40 | 300 |
| 25 | 10 | 41 | 100 |
| 26 | 11 | 40 | 100 |
| ID | Name |
|----|------|
| 40 | Sales|
| 41 | EXP |
工作发票
| ID | JobNumber |
|----|-----------|
| 1 | J200 |
| 2 | J201 |
| ID | InvoiceNumber | JobID |
|----|---------------|-------|
| 10 | I300 | 1 |
| 11 | I301 | 2 |
| ID | InvoiceId | AccountID | Amount |
|----|-----------|-----------|--------|
| 23 | 10 | 40 | 200 |
| 24 | 10 | 40 | 300 |
| 25 | 10 | 41 | 100 |
| 26 | 11 | 40 | 100 |
| ID | Name |
|----|------|
| 40 | Sales|
| 41 | EXP |
发票账户
| ID | JobNumber |
|----|-----------|
| 1 | J200 |
| 2 | J201 |
| ID | InvoiceNumber | JobID |
|----|---------------|-------|
| 10 | I300 | 1 |
| 11 | I301 | 2 |
| ID | InvoiceId | AccountID | Amount |
|----|-----------|-----------|--------|
| 23 | 10 | 40 | 200 |
| 24 | 10 | 40 | 300 |
| 25 | 10 | 41 | 100 |
| 26 | 11 | 40 | 100 |
| ID | Name |
|----|------|
| 40 | Sales|
| 41 | EXP |
客户
| ID | JobNumber |
|----|-----------|
| 1 | J200 |
| 2 | J201 |
| ID | InvoiceNumber | JobID |
|----|---------------|-------|
| 10 | I300 | 1 |
| 11 | I301 | 2 |
| ID | InvoiceId | AccountID | Amount |
|----|-----------|-----------|--------|
| 23 | 10 | 40 | 200 |
| 24 | 10 | 40 | 300 |
| 25 | 10 | 41 | 100 |
| 26 | 11 | 40 | 100 |
| ID | Name |
|----|------|
| 40 | Sales|
| 41 | EXP |
我正在尝试以下方法:
SELECT
J.JobNumber,
A.Name AS "Account",
SUM(JA.Amount) AS 'Total'
FROM
Job J
LEFT JOIN
Job_Invoices JI ON JI.JobID = J.JobID
INNER JOIN
Invoice_Accounts JA ON JA.InvoiceId = JI.ID
INNER JOIN
Accounts A ON A.ID = JA.AccountID
GROUP BY
J.JobNumber, A.Name, JA.Amount
ORDER BY
J.JobNumber
我所期望的是:
| JobNumber | Account | Total |
|-----------|-----------|-------|
| J200 | EXP | 100 |
| J200 | Sales | 500 |
| J201 | Sales | 100 |
我得到的是:
| JobNumber | Account | Total |
|-----------|-----------|-------|
| J200 | EXP | 100 |
| J200 | Sales | 200 |
| J200 | Sales | 300 |
| J201 | Sales | 100 |
问题是您的
groupby
子句中有JA.Amount
。试着把它拿出来:
选择J.JobNumber,A.名称为“账户”,总和(JA.金额)为“总计”
来自Job J
左JOIN Job_JI ON JI.JobID=J.JobID
内部联接发票\u账户JA ON JA.InvoiceId=JI.ID
A.ID=JA.AccountID上的内部联接帐户A
按J.JobNumber、A.Name分组
按J.JobNumber订购
查询中不需要作业
表。内部联接
s与Job\u
表相连,因此外部联接无论如何都会变成内部联接
因此,您可以将其简化为:
SELECT JI.JobNumber, A.Name AS Account, SUM(JA.Amount) AS Total
FROM Job_Invoices JI JOIN
Invoice_Accounts JA
ON JA.InvoiceId = JI.ID JOIN
Accounts A
ON A.ID = JA.AccountID
GROUP BY JI.JobNumber, A.Name
ORDER BY JI.JobNumber;
还请注意,不需要转义列别名。只会使查询更难键入。您可以将查询编写为:
select sum (IA.Amount) as Amount, J.JobNumber,A.Name
from @Invoice_Accounts IA --as it holds the base data
join @Job_Invoices JI on IA.InvoiceId = JI.ID
join @Jobs J on J.id = JI.JobID
join @Accounts A on A.ID = IA.AccountID
group by J.JobNumber,A.Name
包括Jobs
表,因为它有JobNumber
列