oracle多表查詢結合分組排序

2021-10-23 15:53:25 字數 2186 閱讀 7333

需求:根據使用者id,年份、周次查出使用者的所有週報資訊(使用者資訊和一年中的所有周次都要顯示出來)

查出這個結果:

1、需要拿到周報表的狀態和提交日期,

2、需要從檢視拿到月份和周次

3、從使用者表拿到使用者名稱和密碼(該錶存有所有使用者資料)

其中使用者表的userid和周報表的operid一致,周報表的月份和周次和檢視的一致,年份擷取檢視的vdate前四個字段:

第二種,先把資料查出來放到臨時表,再分組排序(建議):

--方法一:

select kv.

year

,kv.userid,kv.username,kv.vmonth,kv.monthweek,a.remark,a.opertime

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

)kvon 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

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

)kvon 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

多表結合查詢

多表結合查詢的方法。多表查詢需要遵循資料庫的規則,必須是主鍵與外來鍵的關係鏈結,主鍵在先外來鍵在後,如果不按照順序就連線不上,下圖顯示的表示一對多的關係。3.首先宣告引數,我要結合5個表來查詢 3.接下來就是連線各個需要的表,下面是連表的 相對於是乙個格式了,必須要遵循這個規則才可以實現查詢的要求。...

mysql排序 分組 多表查詢

1.mysql排序 1.1.從大到小排序,不加desc預設情況下是公升序 mariadb fei1 select from student order by age desc id name age 7 lisi 50 4 sean 28 5 zhangshan 26 3 wangqing 25 2...

Oracle 多表查詢

sql 外連線 sql 按部門統計員工人數 部門號 部門名稱 人數 sql select d.deptno,d.dname,count e.empno 2 from dept d,emp e 3 where d.deptno e.deptno 4 group by d.deptno,d.dname ...