2010-05-10 5 views
1
SELECT DISTINCT 
     IncreasmentAmount, 
     Name, 
     regionid 
FROM   Pricing.GroupOfRegions 
WHERE regionid in (6,7) 

Cette déclaration produit ce résultat:T-SQL: comment grouper des lignes sur une colonne spécifique?

12.80 AB 6 
13.00 ABC 6 
15.00 AC 6 
12.80 AB 7 
13.00 ABC 7 

Je voudrais ajouter d'autres conditions où IncreasmentAmount s sont égales. Cela se traduirait par les lignes qui ont la même IncreasmentAmount:

12.80 AB 6 
12.80 AB 7 

Comment puis-je modifier la requête pour produire les résultats que je veux?

+0

votre sortie doit être de 4 rangées de deux, deux pour 13,00 et deux pour 12,80 – SQLMenace

Répondre

1

Je pense que cela peut vous aider.

SELECT DISTINCT IncreasmentAmount, Name, regionid, count(*) 
FROM Pricing.GroupOfRegions 
where regionid in (6,7) 
group by IncreasmentAmount, Name, regionid 
having count(*) > 1 
+1

ne fonctionnera pas, vous ne pouvez pas le groupe par regionId – SQLMenace

3

exemple

create table #bla(IncreasmentAmount decimal(16,2),Name varchar(40),regionid int) 
insert #bla values(12.80, 'AB', 6) 
insert #bla values(13.00, 'ABC', 6) 
insert #bla values(15.00, 'AC', 6) 
insert #bla values(12.80, 'AB', 7) 
insert #bla values(13.00, 'ABC', 7) 

ici est une façon de le faire

--group also by name 
select b.* from(
SELECT IncreasmentAmount, Name 
FROM   #bla 
where regionid in (6,7) 
group by IncreasmentAmount, Name 
having count(*) > 1) as a 
join #bla b on a.IncreasmentAmount = b.IncreasmentAmount 
and a.Name = b.Name 
where b.regionid in (6,7) 

ou

-- don not group by name 
select b.* from(
SELECT IncreasmentAmount 
FROM   #bla 
where regionid in (6,7) 
group by IncreasmentAmount 
having count(*) > 1) as a 
join #bla b on a.IncreasmentAmount = b.IncreasmentAmount 
where b.regionid in (6,7) 
+0

Merci que était parfait – MirooEgypt

1

Si vous voulez dire que vous devez afficher seulement les lignes pour lesquelles la La 1ère colonne équivaut à une autre rangée, alors j'ai peur yo u'll doivent faire une requête imbriquée comme ceci:

SELECT DISTINCT IncreasmentAmount, Name, regionid 
FROM   Pricing.GroupOfRegions 

where regionid in (6,7) 
and IncreasmentAmount IN (select IncreasmentAmount 
          from Pricing.GroupOfRegions 
          group by IncreasmentAmount 
          having COUNT(*) > 1) 
+0

vous devez également ajouter où regionid dans (6,7) dans votre requête imbriquée sinon si la région 5 et 4 ont le montant 32 et la région 6 l'a aussi, elle sera retournée – SQLMenace

Questions connexes