Re: [MSSQL] 外部的SELECT和WHERE互斥時,該怎麼取值
※ 引述《JYHuang (夏天到了,冷不起來了說)》之銘言:
: 抱歉,想了一整天的條件想到頭昏了 XD
: 發問時把自己想要的條件都弄混了
: 不過現在被要求把兩個條件分開寫
: 又碰到了另一個問題
: 刷卡資料 TABLE "AA"
: A01(工號),A02(日期),A03(時間),A04(上/下班)
: 001 20091120 0900 A
: 001 20091120 1700 B
: 001 20091121 0901 A
: 001 20091121 1701 A
: 這是個上班遲到的檢核程式,我要撈出刷卡資料並比對請假資料。
: SELECT * FROM AA
: LEFT JOIN BB (請假資料)
: ...
: WHERE A04='A' AND A03 > '0900'
: 因為可能會因為刷錯上下班(像是第四筆),而造成誤判
: 所以要跟自己比對A03 = 是當日A03最小
: 能不能在不用GROUP的情形下(因為要合併好幾個table)
: 準確的撈出A04為當日最小的一筆呢?
: 加個 WHERE A04=(subquery) 好像又會把範圍做小了..
: 或是該怎麼做GROUP?
→
11/21 23:54,
11/21 23:54
→
11/23 11:35,
11/23 11:35
DataBase版推文限制限好久 ="=
ERP系統裡的TABLE name命名本來就沒那麼直覺了
如果不精簡一點而照schema打的話,落落長一篇反而不好抓問題吧
--
原本我是以刷卡資料(AMSMC)為主table
人事資料(CMSMV) Join進來,然後遇到上面刷卡資料重複的一些問題。
現在改成這樣的架構
人事資料(CMSMV) 刷卡資料(AMSMC) 請假資料(PALTF)
MV001 工號 MC001 工號 TF001 工號
MV002 姓名 MC002 日期 TF002 日期
MC003 時間 TF011 核準
MC007 上下班
SELECT * FROM CMSMV
LEFT OUTER JOIN (SELECT MC001,MC002,Min(MC003) as MC003,MC007
FROM AMSMC
GROUP BY MC001,MC002,MC007
HAVING MC007='上班'
) AS B
ON MV001 = B.MC001
LEFT JOIN PALTF
ON TF001 = MV001
LEFT JOIN ....
ON ...
WHERE (ISNULL(TF011,'Y') = 'N')
AND.....
先把刷卡資料做過濾再Join進來
才不用煩惱要怎麼做group...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.39.163.122
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):