需求:根据用户id,年份、周次查出用户的所有周报信息(用户信息和一年中的所有周次都要显示出来)
查出这个结果:
1、需要拿到周报表的状态和提交日期,
2、需要从视图拿到月份和周次
3、从用户表拿到用户名和密码(该表存有所有用户数据)
其中用户表的userid和周报表的operid一致,周报表的月份和周次和视图的一致,年份截取视图的vdate前四个字段:
第二种,先把数据查出来放到临时表,再分组排序(建议):
--方法一:
select kv.year,kv.userid,kv.username,kv.vmonth,kv.monthweek,a.remark,a.opertime
from ap_weekappraise a
right join(
select min(k.userid) userid,
min(k.username) username,
min(substr(vdate,1,4)) year,
v.monthweek monthweek,
min(v.vmonth) vmonth
from kd_userid k,vweekdate v
where k.userid='8888'
and v.vdate like '2020%'
--and v.monthweek='02'
group by monthweek
order by monthweek
)kv
on a.operid=kv.userid and a.vmonthweek=kv.monthweek and a.vmonth=kv.vmonth
-- 方法二:
with temp1
as(
select kv.vdate,kv.userid,kv.username,kv.vmonth,kv.monthweek,a.remark,a.opertime
from ap_weekappraise a
right join(
select k.userid ,k.username username, v.vdate,v.monthweek monthweek, v.vmonth
from kd_userid k,vweekdate v
where k.userid='8888'
and v.vdate like '2020%' --and v.monthweek='02'
order by v.monthweek
)kv
on a.operid=kv.userid and a.vmonthweek=kv.monthweek and a.vmonth=kv.vmonth)
SELECT
min(substr(vdate,1,4)) year,
MIN (USERID) USERID,
MIN (USERNAME) USERNAME,
MIN (VMONTH) VMONTH,
MIN (MONTHWEEK) MONTHWEEK,
MIN (REMARK) REMARK,
MIN (OPERTIME) OPERTIME
FROM
temp1
GROUP BY MONTHWEEK
ORDER BY MONTHWEEK