如何使用下表中的SQL检索数据(不使用PL / SQL)

时间:2015-01-23 06:58:58

标签: sql oracle db2

仅使用DB2或Oracle的SQL表而不是过程语言

Name        Date          Amt          Reason
-----       -----        -------      ---------
A          10 Nov        200          Overdue
A          20 Nov        500          EMT
B          6 Dec         300          Overdue
B          3 Dec         100          EMT

结果类似于重复项中的唯一名称,最小日期,最大金额,如果过期,任何一个重复项必须打印过期如果不打印其他部分。见结果表,如下所示

Name        Date        Amt           Reason
-----      ------      -----         --------
A          10 Nov       500          Overdue
B          3 Dec        300          Overdue

1 个答案:

答案 0 :(得分:0)

with input as (
  select 'A' name , '10 Nov' "date", 200 amt, 'Overdue' reason from dual
  union all select 'A', '20 Nov', 500, 'EMT' from dual
  union all select 'B', '6 Dec', 300, 'Overdue' from dual
  union all select 'B', '3 Dec', 100, 'EMT' from dual)
select name, min("date") "date", max(amt), 
    substr(max(decode(reason, 'Overdue', '2'||reason, '1'||reason) ), 2) reason
  from input
  group by name

您可以使用以下日期:

min(to_date(decode(length("date"), 5, '0', '')||"date", 'dd MON'))

而不是min("date")