我有一个名为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(同样,如果它已经不存在于输出中)。
从我给出的例子中可以更清楚。
提前感谢您的任何建议!
答案 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
答案 1 :(得分:1)
查看有关子查询的这篇文章:它将在未来帮助您解决这个问题和其他问题:
答案 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