GROUP BY sql,多条记录返回一条

时间:2015-04-10 11:39:15

标签: sql sql-server-2008 tsql group-by

我有一张表格如下:

INSTR_ID    PRC_TMS     PRC_CURR_CDE    PRC_TYP    PRC_QUOTE_AMT
5901        31/03/2015  EUR             CLO         89.73
5901        31/03/2015  EUR             LST         89.53
1123        31/03/2015  USD             CLO         12.35 

我需要做的是查询选择,但是我有多个INSTR_ID,如果我有CLO PRC_TYP则返回PRC_QUOTE_AMT,否则返回LST PRC_QUOTE_AMT。 / p>

我看过group by,但不确定如何构建逻辑来选择CLO else LST?

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:0)

您可以使用row_number()

对行进行优先排序(选择一行)
select t.*
from (select t.*,
             row_number() over (partition by INSTR_ID
                                order by (case when PRC_TYP = 'CLO' then 1
                                               when PRC_TYPE = 'LST' then 2
                                               else 3
                                          end)
                               ) as seqnum
      from table t
     ) t
where seqnum = 1;

对于您提供的数据,您还可以使用group by

select INSTR_ID, PRC_TMS, PRC_CURR_CDE,
       coalesce(max(case when PRC_TYP = 'CLO' then PRC_QUOTE_AMT end),
                max(PRC_QUOTE_AMT) ) as PRC_QUOTE_AMT
from table t
group by INSTR_ID, PRC_TMS, PRC_CURR_CDE;

答案 1 :(得分:0)

如果CLO返回,如果没有具有相同id和CLO的行,则返回。

select * from tablename t1
where PRC_TYP = 'CLO'
 or not exists (select 1 from tablename t2
                where t1.INSTR_ID = t2.INSTR_ID
                 and t2.PRC_TYP = 'CLO')