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
3 Réponses :
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) comptage code> est un mot réservé (2) il manque à la sous-requête
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'
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