Je ne comprends pas ce que je pense et je me demandais si quelqu'un pourrait peut-être m'aider avec cela.
J'ai 2 tables appelées RES_DATA
et INV_DATA
RES_DATA
contient mon client comme ci-dessous
CUSTOMER ID | NAME
1, Robert
2, John
3, Peter
INV_DATA
contient leurs factures comme ci-dessous
INVOICE ID | CUSTOMER ID | AMOUNT
100, 1, £49.95
200, 1, £105.95
300, 2, £400.00
400, 3, £150.00
500, 1, £25.00
J'essaie d'écrire une déclaration SELECT
qui me donnera les résultats comme ci-dessous.
CUSTOMER ID | NAME | TOTAL AMOUNT
1, Robert, £180.90
2, John, £400.00
3, Peter, £150.00
Je pense que j'ai besoin de 2 INNER JOINS pour ajouter les tables et les valeurs SOMME de la table INVOICES GROUPED BY BY Customer Table, mais je pense sincèrement que quelque chose me manque. Je ne peux même pas me rapprocher des résultats dont j'ai besoin.
Cela devrait marcher.
SELECT a.[CUSTOMER ID], a.[NAME], SUM(b.[AMOUNT]) AS [TOTAL AMOUNT]
FROM RES_DATA a INNER JOIN INV_DATA b
ON a.[CUSTOMER ID]=b.[CUSTOMER ID]
GROUP BY a.[CUSTOMER ID], a.[NAME]
Je l'ai testé avec SQL Fiddle contre SQL Server 2008: http://sqlfiddle.com/#!3/1cad5/1
Fondamentalement, ce qui se passe ici, c'est que, à cause de la jointure, vous obtenez la même ligne à gauche (c'est-à-dire à partir de la table RES_DATA
) pour chaque ligne à droite (à savoir la table INV_DATA
) qui a la même valeur [CUSTOMER ID]
. . Lorsque vous regroupez uniquement les colonnes du côté gauche, puis que vous faites la somme de la colonne [AMOUNT]
du côté droit, la ligne restante est intacte du côté gauche et les valeurs correspondantes sont résumées du côté droit.
Deux façons de le faire ...
PAR GROUPE
SELECT RES.[CUSTOMER ID], RES,NAME, SUM(INV.AMOUNT) AS [TOTAL AMOUNT]
FROM RES_DATA RES
JOIN INV_DATA INV ON RES.[CUSTOMER ID] INV.[CUSTOMER ID]
GROUP BY RES.[CUSTOMER ID], RES,NAME
PLUS DE
SELECT RES.[CUSTOMER ID], RES,NAME,
SUM(INV.AMOUNT) OVER (PARTITION RES.[CUSTOMER ID]) AS [TOTAL AMOUNT]
FROM RES_DATA RES
JOIN INV_DATA INV ON RES.[CUSTOMER ID] INV.[CUSTOMER ID]