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= maximumの場合、行は出力に入れられます(存在しない場合)。すでに)。それ以外の場合、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フィドルの例

于 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 に答える