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

Это утверждение дает этот результат:T-SQL: как сгруппировать строки по определенному столбцу?

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

я хотел бы добавить больше условий, при которых IncreasmentAmount s равны. Это приведет к строкам, которые имеют один и тот же IncreasmentAmount:

12.80 AB 6 
12.80 AB 7 

Как я могу изменить запрос для получения результатов, которые я хочу?

+0

результат должен быть 4 строки не два, два на 13.00 и два для 12,80 – SQLMenace

ответ

1

Я думаю, это может вам помочь.

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

не будет работать, вы не можете сгруппировать по RegionId – SQLMenace

3

пример

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) 

вот один из способов сделать это

--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) 

или

-- 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

Спасибо, что было совершенным – MirooEgypt

1

Если вы имеете в виду, что вам нужно, чтобы показать только те строки, для которых 1-я колонна равна некоторой другой строке, тогда я боюсь лет u'll должны сделать вложенный запрос, как это:

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

, вам также нужно добавить where regionid в (6,7) в ваш вложенный запрос, иначе, если в области 5 и 4 есть сумма 32, а в области 6 она тоже будет возвращена – SQLMenace

Смежные вопросы