这是我想要做的。我有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
答案 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