求解,我现在查出了测站测验要素id的集合,日期的集合,现在需要从这张表得到每个测站测验要素在日期集合里每天的数据,测站测验要素id从别的表查出来,可能这张表都没有这个id记录,但也要以日期段每天为0查出来
========补充=======
举个例子
例如一张用户表吧
id 名称 分数 考试日期 四列
要查id为1,2,3的三个人在1日,2日,3日的成绩
而这张表里现在没有id为2的这名学生的记录
并且id为3的学生没有在2日的分数记录
但是最后的结果格式依旧要是
1 1日 分数
1 2日 分数
1 3日 分数
2 1日 分数
2 2日 分数
2 3日 分数
3 1日 分数
3 2日 分数
3 3日 分数
==========再补充=======
首先谢谢各位的主意,但是当我看到主要以between和大于小于来取数据的时候,似乎就不对了,因为id集合是从字典表拿的,但是数据表里可能都没这个id的记录,between一下直接就把这id给筛掉了
order by SSDEC_DATE日期分组 id那个问题设定个NVL(num ,0) num为你统计的字段,如果这个字段为空变为0
应该是这样,改变一下最后的where条件就能查询出数据。
select * from (
select a.测验要素id,nvl(b.counts) as counts
from 测验要素id表 a
left outer join (select 测验要素id, count(*) as counts
from pub_log
where SSDEC_DATE >=
to_date('2018-01-01 0:0:0',
'yyyy-MM-dd HH24:mi:ss')
and SSDEC_DATE <
to_date('2018-04-01 0:0:0'',
'yyyy-MM-dd HH24:mi:ss')
group by 测验要素id) b
on a.测验要素id = b.测验要素id
)a where a.counts=0
select * from (
select a.测验要素id,a.days,nvl(b.counts) as counts
from 测验要素id表 a
left outer join (select 测验要素id,to_char( SSDEC_DATE,'yyyy-MM-dd HH24:mi:ss') as days, count(*) as counts
from pub_log
where SSDEC_DATE >=
to_date('2018-01-01 0:0:0',
'yyyy-MM-dd HH24:mi:ss')
and SSDEC_DATE <
to_date('2018-04-01 0:0:0'',
'yyyy-MM-dd HH24:mi:ss')
group by 测验要素id,to_char( SSDEC_DATE,'yyyy-MM-dd HH24:mi:ss')) b
on a.测验要素id = b.测验要素id
)a where a.counts=0
这个不知道对不对了,没有实际数据验证过,你可以试试看,用编号和日期天来先做分组,然后左关联一下,
SELECT
*
FROM
(
'其他表测站编号来源数据'
) T1
LEFT JOIN (
SELECT
MIN (T1.SSDEC_ID) SSDEC_ID,
CHAR (T2.SSDEC_DATE, 'YYYY-MM-DD') AS SSDEC_DATE,
SUM (T1.SSDEC_REALCOUN) AS SSDEC_REALCOUN
FROM
'数据表'
GROUP BY
T1.SSDEC_ID,
TO_CHAR (SSDEC_DATE, 'YYYY-MM-DD')
) T2 ON T1.SSDEC_ID = T2.SSDEC_ID
AND T1.SSDEC_DATE = T2.SSDEC_DATE
应该是这样的。。
select a.*,nvl(b.counts,0) as counts from (
select a.测验要素id,b.days from 测验要素id表 a,(
select to_char(SSDEC_DATE, 'yyyy-MM-dd HH24:mi:ss') as days
from pub_log
where SSDEC_DATE >= to_date('2018-01-01 0:0:0', 'yyyy-MM-dd HH24:mi:ss')
and SSDEC_DATE < to_date('2018-04-01 0:0:0'', 'yyyy-MM-dd HH24:mi:ss')
group by to_char(SSDEC_DATE,'yyyy-MM-dd HH24:mi:ss')
) b
) a
left outer join (
select 测验要素id,to_char(SSDEC_DATE, 'yyyy-MM-dd HH24:mi:ss') as days,count(*) as counts
from pub_log
where SSDEC_DATE >= to_date('2018-01-01 0:0:0', 'yyyy-MM-dd HH24:mi:ss')
and SSDEC_DATE < to_date('2018-04-01 0:0:0'', 'yyyy-MM-dd HH24:mi:ss')
group by 测验要素id,to_char(SSDEC_DATE,'yyyy-MM-dd HH24:mi:ss')
) b on a.测验要素id=b.测验要素id and a.days=b.days
应该可以用笛卡尔积关联表来查询,你可以试一下
把你查询出来的测验要素id和日期 用 cross join 连接 查询