作者JYHuang (夏天到了,冷不起来了说)
看板Database
标题Re: [MSSQL] 外部的SELECT和WHERE互斥时,该怎麽取值
时间Mon Nov 23 13:36:49 2009
※ 引述《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?
1F:→ JYHuang:ㄜ....试出答案了...只是跟原先想的走不同的方向...11/21 23:54
2F:→ adrianshum:AA, BB, A01, A02. 你不能写得易读一点才发问吗? orz11/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