我有一个select语句,它给出了时间范围内的活动。例如。Oracle SQL:在LEFT JOIN的t2中使用distinct(t1.field)
Hour | Action | Count
---------------------
00 | a1 | 23
00 | a2 | 48
01 | a1 | 16
02 | null | null
03 | a1 | 5
04 | a2 | 2
您会看到,由于产生此结果的分组,因此不会计算小时01,动作02等。我想是这样的:
Hour | Action | Count
---------------------
00 | a1 | 23
00 | a2 | 48
01 | a1 | 16
01 | a2 | 0
02 | a1 | 0
02 | a2 | 0
03 | a1 | 5
03 | a2 | 0
04 | a1 | 0
04 | a2 | 2
要做到这一点我想确定排行动不同的值,然后留下同桌加入此。这将是这样的SQL代码:
select distinct(t2.action) as action
from t2 as t1
left join (select hour, action, count from <whatever to get the table>) as t2
on t1.action = t2.action
但如果我这样做,我understandibly得到错误的表t2不是t1的select语句内有效。
请帮助我完成任务。但我不想在原始表格上做独特的事情(它有五千万条记录)。
在此先感谢!
您可以在时间欺骗:他们'从0到23,而不是通过表格,你可以做'...从(SELECT LEVEL-1 AS小时从双连接到LEVEL <= 24)'。另外,您是否有Action的查找表?如果是这样,你可以通过查找表将上面的小黑客交叉加入,并且有一个完整的小时/动作网格,而无需靠近5000万行表。 – 2013-03-08 15:54:51
独特是***不是***功能。 'distinct(t2.action)'完全没用。它与'distinct t2.action'完全相同。你不写'select(t2.action)...',不是吗? – 2013-03-08 17:12:20