2010-05-10 65 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 2010-05-10 15:43:13

回答

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 2010-05-10 15:42:28

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 2010-05-10 16:49:15

1

如果你的意思是你需要只显示行为其第一列等于其他行,那么我恐怕哟日子会把你必须做一个嵌套查询是这样的:

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

你还需要在嵌套查询中添加(6,7)中的regionid,否则如果区域5和4的数量是32,区域6是否有它,它将被返回 – SQLMenace 2010-05-10 15:50:52

相关问题