SQL联接和组的问题

SQL联接和组的问题,sql,join,group-by,Sql,Join,Group By,我有4个表,我正试图加入,然后分组数据。数据包括作业、发票和账目。我想在每个作业中生成每个帐户的总数 我有以下表格: 工作 | ID | JobNumber | |----|-----------| | 1 | J200 | | 2 | J201 | | ID | InvoiceNumber | JobID | |----|---------------|-------| | 10 | I300 | 1 | | 11 | I301

我有4个表,我正试图加入,然后分组数据。数据包括作业、发票和账目。我想在每个作业中生成每个帐户的总数

我有以下表格:

工作

| 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