10
votes

SQL: Sélection des lignes contenues dans un groupe

Je travaille sur une requête pour SQL Server et je me demande si quelqu'un peut me donner des conseils sur la sélection de lignes individuelles qui composent un groupe (où le groupe est basé sur une fonction globale, comptez dans ce cas) Ainsi, comme exemple simplifié, si j'ai une table de facturation, comme ci-dessous, je souhaite sélectionner toutes les factures pour chaque client où elles ont 2 factures ou plus à une certaine date. P>

ClaimID ClientName  Count
101         Jim     2
102         Jim     2
104         Mary    3
106         Mary    3
107         Mary    3


0 commentaires

3 Réponses :


1
votes
Select ClaimID, ClientName, Count From Billings 
Where ClientName In (SELECT ClientName FROM Billings
                    WHERE ClaimDate > '2010'
                    Group By ClientName
                    Having COUNT(ClaimID) > 1) And ClaimDate > '2010'
That will generate a list of client names and then select all of the claims that have clients with those names.

1 commentaires

(1) comptage est un mot réservé (2) il manque à la sous-requête



16
votes

Vous vous joignez à cela à la table principale.

SELECT B.ClaimID, B.ClaimDate, B.ClientName, G.ClaimCount
FROM
(
    SELECT ClientName, COUNT(ClaimID) ClaimCount
    FROM Billings
    WHERE ClaimDate > '2010'
    Group By ClientName
    Having COUNT(ClaimID) > 1
) G
INNER JOIN Billings B on B.ClientName = G.ClientName
WHERE B.ClaimDate > '2010'


0 commentaires

5
votes

Assumant SQL Server 2005 ou plus tard, vous pouvez utiliser une expression de table commune

With MultipleBillings As
    (
    Select ClaimId, ClaimDate, ClientName
        , Count(ClaimId) Over ( Partition By ClientName ) As BillingCount
    From Billings
    Where ClaimDate > '2010'
    )
Select ClaimId, ClaimDate, ClientName
From MultipleBillings
Where BillingCount > 1


0 commentaires