我有A,B兩個資料表,A資料表有所有15個員工的當年度所擁有的特休假數,B資料表是員工請假的資料,我用SQL語法將A,B兩表可以查詢出有請假的員工資料,剩下幾天的特休假,可是有一個問題,假設明年度開始有些人還未請假,所以用SQL語法查詢出的結果不會顯示出來,我要怎麼做才能將A資料表全部顯示員工出來,但是又可以和B資料表結合,最後可以顯示所有員工應修特休假,未修特休假,還沒修特休假則顯示NULL。
SQL 有橫向串接 (關聯查詢)
join
與垂直串接 (跨Table同欄位的資料串起來)
union
你可以參考
http://www.w3schools.com/sql/sql_join.asp
http://www.w3schools.com/sql/sql_union.asp
SQL虛擬碼:
<pre class="c" name="code">
select A.員工,A.應休,A.應休-已休
from A left join
(select B.員工 as 休假人,sum(B.日數) as 已休 from B group by B.員工)
on A.員工=休假人
大大您好!
SELECT afu_form_HR.ApplyerDeptName,HRperson,HRday,sum(HRdays)as UsedDay,(HRday-sum(HRdays))as UnusedDay
FROM afu_form_HR inner JOIN vacation on
afu_form_HR.Applyname=vacation.HRname where end_date Between '20120101' and '20121231' and Excuse='特休假'
group by afu_form_HR.ApplyerDeptName,HRperson,HRday
<pre class="c" name="code">
以上為結合資料表會產生有請特休的人員,A資料表(vacation)欄位只有全員名單(HRname)和應休天數(HRday),B資料表為(afu_form_HR),部門(ApplyerDeptName),請假天數(HRdays),現在只差無法全員列出有請和沒請特休假的人,謝謝!
大大您好!或者我可以將(應休-已休)的結果寫到A資料表上,再從A資料表查詢結果,該怎麼做呢?這個方法好嗎?謝謝!
不是已經寫了虛擬碼給你了?就代換成你的實際 TABLE 跟欄位就好了:
<pre class="c" name="code">select B.ApplyerDeptName,A.HRname,A.HRday,A.HRday-B.HRdaied
from vacation as A left join
(select ApplyerDeptName,Applyname,sum(HRdays) as HRdaied from afu_form_HR group by Applyname) as B
on A.HRname=B.Applyname
其它日期與假別條件就請你自行加入了。
wiseguy提到:
不是已經寫了虛擬碼給你了?
很像我以前對一些不用心的程式設計師講話...
萬分感謝大大提供資訊,願意耐心回覆小弟,已經可以成功跑出我要的結果了。
SELECT afu_form_HR.ApplyerDeptName,HRperson,HRday,sum(HRdays)as UsedDay,(HRday-sum(HRdays))as UnusedDay
FROM afu_form_HR inner JOIN vacation on
afu_form_HR.Applyname=vacation.HRname where end_date Between '20120101' and '20121231' and Excuse='特休假'<--指定了只取特休的 所以拿掉就全有了
group by afu_form_HR.ApplyerDeptName,HRperson,HRday
但不確定這是你要的資料
若你下的語法可取出你要的資料 則可用暫存資料表的方式進行後續處理
暫存資料表 參考語法
1.with temptable as(較耗記憶體資源)
2.create view temptable as
若資料量大建議採 create view 的方式
例如
<pre class="c" name="code">create view temp as
SELECT afu_form_HR.ApplyerDeptName,HRperson,HRday,sum(HRdays)as UsedDay,(HRday-sum(HRdays))as UnusedDay
FROM afu_form_HR inner JOIN vacation on
afu_form_HR.Applyname=vacation.HRname where end_date Between '20120101' and '20121231' and Excuse='特休假'
group by afu_form_HR.ApplyerDeptName,HRperson,HRday
你在利用select temp 就能看到得到的結果了
但當view 不需使用 記得drop 掉 DROP VIEW temp 則將該表刪除
這樣問是 : 學校 [沒有指導教授]公司[沒有指導顧問]?
給你專業建議; 要有技術顧問; 否則進度嚴重落後; 薪資多花3-5倍; 夠請顧問了....
有要回雲林工作的同學嗎 ? SAP / B1 外掛程式
[學歷不拘 經驗不拘 體健耐超, 有耐心, 不抽菸不喝酒]
一周 2 - 3 天在斗六工業區
實習時薪 100元 200小時 2萬
試作時薪 200元 400小時 8萬
助理工程師時薪 300元 800小時 24萬
副工程師時薪 400元 1600小時 64萬
正工程師時薪 500元 3200小時 160萬
SAP / B1 外掛程式:: 有無經驗皆可
badboy01提到:
我有A,B兩個資料表,
A資料表有所有15個員工的當年度所擁有的特休假數,
B資料表是員工請假的資料,
我用SQL語法將A,B兩表可以查詢出有請假的員工資料,
剩下幾天的特休假,
可是有一個問題,
假設明年度開始有些人還未請假,
所以用SQL語法查詢出的結果不會顯示出來,
我要怎麼做才能將A資料
...(恕刪)
SELECT a.*,b.*
FROM A資料表 a ---有所有15個員工的當年度所擁有的特休假數,
LEFT OUTER JOIN B資料表 b ON a.員工ID=b.員工ID ---是員工請假的資料,
................................................................