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