这就是我想要做的。我有两张桌子:
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-2016T2
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,我想:
- then, count how many rows Id has and list the max count as B-1, B-5, B-8 and so on. e.g: - `#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发布于 2016-04-20 19:21:37
试一试
SELECT id,
CASE WHEN count( "create datetime" ) = 0
THEN 'A'
ELSE 'B-' || count( "create datetime" )
END As Comments
FROM T2
GROUP BY id发布于 2016-04-20 19:49:52
您可以在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.idPS:我没有编译上面的代码。根据需要使用联接或左联接。如果您确信t2中会有一个条目,那么简单的联接也会起作用。
发布于 2016-04-20 20:42:45
下面的内容是在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 | AHTH
https://stackoverflow.com/questions/36753074
复制相似问题