0
votes

Groupe par SQL Server et concaténate Records dans une colonne

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  


0 commentaires

4 Réponses :


0
votes

vous strud> peut utiliser 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


0 commentaires

-2
votes

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


1 commentaires

Mauvaise base de données - c'est SQL-Server



1
votes

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


1 commentaires

J'ai compris. Merci :)



1
votes

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


0 commentaires