-1

这是我表中的数据

XDATE       AC      BN      XPASS           UCODE   LVL
31-AUG-13   C-3     301     25-SEP-13       5465189  4
31-AUG-13   C-3     304     25-SEP-13       5465189  4
31-AUG-13   C-1     104     27-SEP-13       1000020  3
31-AUG-13   C-1     104     27-SEP-13       6461005  4

这是我正在执行的查询

select 
    AC,
    BN,
    (case when count(*)>1 then 'Forwarded' else 'Prepared' end) status,
    min(LVL) 
from adsalarypreparationdtl 
group by AC,BN 

这给了我以下结果:

AC       BN         STATUS         LVL
C-1      104        Forwarded       3
C-3      301        Prepared        4
C-3      304        Prepared        4

我找到了一切,但我也想要根据 LVL 的最小值的 UCODE

像这样的例子:

AC       BN      STATUS     UCODE       LVL
C-1      104     Forwarded  1000020     3
C-3      301     Prepared   5465189     4
C-3      304     Prepared   5465189     4

请帮忙。

4

2 回答 2

2

您没有说明您的 DBMS,所以这是 ANSI SQL:

select AC,
       BN,
       ucode, 
       lvl
from (
    select ac, 
           bn,
           ucode,
           lvl, 
           row_number() over (partition by AC,BN order by lvl) as rn
    from adsalarypreparationdtl 
) t 
where rn = 1;
于 2013-09-27T08:11:29.607 回答
1

怎么样

select q1.*,q2.ucode
from (YourQuery) q1
left join adsalarypreparationdtl q2
on q1.ac=q2.ac and q1.bn=q2.bn and q1.minlvl=q2.lvl

在您的查询中,您应该将 min(lvl) 列别名为 minlvl。

可能它效率不高,但会起作用。

编辑:如果有 2 行或更多行具有相同的 lvl,您是否需要任何特殊处理?

于 2013-09-27T07:47:49.417 回答