0

我有一个名为 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 = 最大值,则将行放在输出中(如果它不存在已经)。否则,如果 element.ColumnB 与最大值不同,则将当前行放入输出中,ColumnC 为 NULL,ColumnB 为 MAXIMUM(同样,如果它在输出中不存在)。

从我给出的示例中更清楚。

提前感谢您的任何建议!

4

4 回答 4

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

Sql Fiddle 上的示例

于 2012-07-26T11:16:58.870 回答
1

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

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

于 2012-07-26T11:08:43.480 回答
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
于 2012-07-26T11:16:58.707 回答
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 
于 2012-07-26T11:23:29.857 回答