Oracle / SQL:计算值的数量并分配一个数字

时间:2016-04-20 19:12:40

标签: sql oracle

这是我想要做的。我有2张桌子:

T1:

ID     create datetime(mm/dd/yyyy hh:mm:ss)
1      17-Apr-2016
2      18-Apr-2016
3      13-Apr-2016
4      15-Apr-2016
5      20-Apr-2016
6      19-Apr-2016

T2

ID(FK) seq      create datetime(mm/dd/yyyy hh:mm:ss)
1      6546       20-Apr-2016 
1      5457       19-Apr-2016 
1      4245       18-Apr-2016
1      0
2      5567       19-Apr-2016 
2      0
3      2034       15-Apr-2016 
3      1987       14-Apr-2016 
3      1902       14-Apr-2016 
3      1249       13-Apr-2016 
3      0
4      2209       15-Apr-2016 
4      2456       16-Apr-2016 
4      3578       17-Apr-2016 
4      3467       17-Apr-2016 
4      4645       18-Apr-2016 
4      5357       19-Apr-2016 
4      0
5      0
6      0

对于每个ID,我想:

  • 如果Id在T2 / Seq = 0中没有创建时间,则将ID列为“A”。例如:5,6将是A

  • 如果Id在T2中有有效的seq / create time:

    • 然后,计算Id有多少行,并将最大计数列为B-1,B-5,B-8等。 例如:

      • #1 - B-3
      • #2 - B-1
      • #3 - B-4
      • #4 - B-6

我期待我的输出如下:

ID   Comments
1      B-3
2      B-1
3      B-4
4      B-6
5       A
6       A

3 个答案:

答案 0 :(得分:0)

尝试

SELECT id,
      CASE WHEN count( "create datetime" ) = 0
           THEN 'A'
           ELSE 'B-' || count( "create datetime" )
      END As Comments
FROM T2
GROUP BY id

答案 1 :(得分:-1)

您可以在oracle中使用case语句或Decode函数。

select t1.id, decode(t2.create_date_time,0,'A',
                                        "B - "||t2.create_date_time) 
 from t1 
Left join t2
on t1.id = t2.id
group by t1.id

PS:我没有编译上面的代码。根据您的需要使用加入或左连接。如果你确定在t2中有一个条目,那么简单的连接也会起作用。

答案 2 :(得分:-1)

以下是在t1中有记录而t2中没有记录的情况下进行思考。 (例如:

----+-------------
  1 | 18-Apr-2016
  2 | 18-Apr-2016
  3 | 13-Apr-2016
  4 | 15-Apr-2016
  5 | 20-Apr-2016
  6 | 19-Apr-2016
  7 | 19-Apr-2016)
  

查询

select 
  a.id, 
  case when inst> 0 then 'B-'||inst else 'A' end Coments
  from t1 a left outer join 
      (select id,
      count(create) inst 
      from t2 group by id) b 
  on a.id=b.id;
  

执行结果

 id | coments 
----+---------
  1 | B-3
  2 | B-1
  3 | B-4
  4 | B-6
  5 | A
  6 | A
  7 | A

HTH