J'ai une vue nommée patay_data code> qui inclut les champs numériques, date et chaîne.
company | ref | Tag | event_date | sale_price | Amount | Receipt_No | Paid | Balance
PRco Ltd| 123 | 0311| 03-10-2018 | 610000 | 610000 | R19A0000761, R19A0000912 | 61000 | 0
4 Réponses :
Stuff code> et
groupe par code> avec
min, max, somme code> Agrégation comme ci-dessous et dans votre Exemple
Le montant payé est en 5 chiffres CODE> et
Montant en 6 chiffres CODE> Il ne peut donc pas être
zéro code> en solde. Dans mon exemple, j'ai fait
6 chiffres payé code> pour correspondre à votre résultat attendu, mais vous devez le corriger et l'utiliser selon les besoins
company ref Tag event_date sale_price amount receipt paid balance
PRco Ltd 123 311 2018-03-10 610000 610000 R19A0000761,R19A0000912 610000 0
Vous pouvez utiliser la fonction group_concat à Concat en fonction du groupe par.
SELECT company, ref, Tag, sale_price, Amount, dbo.GROUP_CONCAT(Receipt_No + ',' ) AS Receipt_No , sum(Paid) FROM dbo.foo GROUP BY company, ref, Tag, event_date, sale_price, Amount
Mauvaise base de données - c'est SQL-Server
La requête ci-dessous vous aide à obtenir le résultat souhaité. La table d'échantillons créée pour votre référence, vous pouvez utiliser la vue au besoin. Fonction de substance Aide pour concaténer les numéros de réception
DECLARE @Payment_Data Table( Company VARCHAR(50), Ref INT, Tag INT, Event_date DATE, Sale_price INT, Amount INT, Receipt_No VARCHAR(50), Paid INT, Balance INT) INSERT INTO @Payment_Data VALUES ('PRco Ltd',123,0311,'03-10-2018',610000,610000,'R19A0000761',500000,11000), ('PRco Ltd',123,0311,'03-10-2018',610000,610000,'R19A0000912',110000,0) SELECT Company, Ref, Tag, max(Event_date), max(Sale_price), MAX(Amount) amount, SUM(Paid) paid, (MAX(Amount)-SUM(Paid)) Balance, Receipt_No = STUFF(( SELECT ',' + Receipt_No FROM @Payment_Data p2 WHERE ref = p2.ref FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') FROM @Payment_Data p1 GROUP BY Company, Ref, Tag
J'ai compris. Merci :)
Il peut utiliser groupe par code> comme suit.
SELECT s1.company,
s1.ref,
s1.tag,
s1.event_date,
max(s1.sale_price) sale_price,
max(s1.amount) amount,
STUFF ((SELECT ', ' + CAST(receipt_no AS varchar(100))
FROM
payment_data pd where pd.ref=s1.ref
ORDER BY receipt_no
FOR XML PATH('')
),1,2,'' ) AS Receipt_No,
sum(s1.paid) paid ,
min(s1.balance) balance
from payment_data s1
group by company,ref,tag,event_date