首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle/SQL :值的计数和赋值

Oracle/SQL :值的计数和赋值
EN

Stack Overflow用户
提问于 2016-04-20 19:12:39
回答 3查看 100关注 0票数 0

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

T1:

代码语言:javascript
复制
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

代码语言:javascript
复制
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时间:
代码语言:javascript
复制
- then, count how many rows Id has and list the max count as B-1, B-5, B-8 and so on. e.g: 
代码语言:javascript
复制
    - `#1 - B-3`
    - `#2 - B-1`
    - `#3 - B-4`
    - `#4 - B-6`

我期望我的产出如下:

代码语言:javascript
复制
ID   Comments
1      B-3
2      B-1
3      B-4
4      B-6
5       A
6       A
EN

回答 3

Stack Overflow用户

发布于 2016-04-20 19:21:37

试一试

代码语言:javascript
复制
SELECT id,
      CASE WHEN count( "create datetime" ) = 0
           THEN 'A'
           ELSE 'B-' || count( "create datetime" )
      END As Comments
FROM T2
GROUP BY id
票数 -1
EN

Stack Overflow用户

发布于 2016-04-20 19:49:52

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

代码语言:javascript
复制
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中会有一个条目,那么简单的联接也会起作用。

票数 -1
EN

Stack Overflow用户

发布于 2016-04-20 20:42:45

下面的内容是在t1上有记录而t2中没有记录的场景中进行思考的。(例如:

代码语言:javascript
复制
----+-------------
  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)

查询

代码语言:javascript
复制
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;

执行结果

代码语言:javascript
复制
 id | coments 
----+---------
  1 | B-3
  2 | B-1
  3 | B-4
  4 | B-6
  5 | A
  6 | A
  7 | A

HTH

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36753074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档