SQL查询 - 不同的组

时间:2012-07-26 11:05:45

标签: sql sql-server-2008

我有一个名为TableA的表。

输入:

ColumnA      ColumnB    ColumnC
jim          1788           5F
jim          2000           9F
jim          500            9F
ben          190            4H
geri          40        manny
geri          40        kelly
geri          20        joker
geri          20        jam

输出:

ColumnA     ColumnB     ColumnC
jim            2000         9F
jim            2000         NULL
ben             190         4H
geri            40          manny
geri            40          kelly
geri            40          NULL

有人可以帮我解决SQL查询吗?

逻辑如下:

我想按ColumnA对行进行分组,例如“gerri”组将有4行。对于每个组,计算ColumnB的最大元素,对于gerri组,它是40。 分析组中的每个元素的ColumnB:如果element.ColumnB = maximum,则将行放入输出中(如果它已经不存在)。否则,如果element.ColumnB不同于最大值,则将当前行放在ColumnC上的NULL和ColumnB上的MAXIMUM(同样,如果它已经不存在于输出中)。

从我给出的例子中可以更清楚。

提前感谢您的任何建议!

4 个答案:

答案 0 :(得分:3)

; with maxes as (
  select ColumnA,
         ColumnB,
         ColumnC,
         max(ColumnB) over (partition by ColumnA) mx
    from tablea
)
select distinct
       ColumnA, 
       mx ColumnB, 
       case when mx = ColumnB 
            then ColumnC 
            else null 
        end ColumnC
from maxes

Example on Sql Fiddle

答案 1 :(得分:1)

查看有关子查询的这篇文章:它将在未来帮助您解决这个问题和其他问题:

http://allenbrowne.com/subquery-01.html

答案 2 :(得分:0)

WITH CTE AS 
(
    select   ColumnA,MAX(ColumnB) as max
    FROM    TABLE 
)select ColumnA,b.max,CASE WHEN a.ColumnB=b.max  THEN ColumnC ELSE NULL END
FROM TABLE  a
INNER JOIN CTE b on a.ColumnA=b.ColumnA

答案 3 :(得分:0)

这样的事可能有效

with cte (columna,columnb)
as
( 
select columna,max(columnb) as columnb from table
group by  columna
)

select t1.columna,t1.columnb,t1.columnc from table as t1 inner join cte as ct 
on t1.columna=t2.columna and t1.columnb=t2.columnb
union all
select columa,columnb,NULL from cte