그래서 MS Access 응용 프로그램을 SQL Server 백엔드에 다시 쓰는 중입니다. 액세스가 MAX()
을 사용하는 방식과 SQL Server가 수행하는 방식에서 일부 비정상적인 동작으로 고민하고 있습니다. 어쩌면 잠을 자지 못했지만 몇 시간 동안이 문제를 꼼짝 않고 바라 보면서 SQL 서버 결과가 다른 이유를 알 수 없습니다.Max() 동작이 MS Access와 SQL 서버간에 다릅니다
샘플 데이터 :
Acct ByUser TranType TranID AddID ClearTime TranTime
12345678 CZ12 W 55545124 CZ36 12/12/2011 9:45:31 AM 12/12/2011 9:45:31 AM
12345678 CZ24 W 55545124 CZ36 12/12/2011 10:01:26 AM 12/12/2011 10:01:26 AM
12345678 CZ36 W 55545124 CZ36 12/12/2011 9:45:31 AM 12/12/2011 9:45:31 AM
12345678 MG12 W 55545124 CZ36 12/12/2011 10:48:43 AM 12/12/2011 10:48:43 AM
12345678 CZ25 W 55545124 CZ36 12/12/2011 9:45:31 AM 12/12/2011 9:45:31 AM
MS 액세스 쿼리 : Access에서
SELECT Acct, TypeID, TranType
, Max(TranTime) AS MaxOfTranTime
, AddID
, Max(ClearTime) AS MaxOfClearTime
FROM Cleared
WHERE
(
((ByUser) Like "CZ*" Or (ByUser) Like "TR*" Or
(ByUser) Like "RR*" Or (ByUser) Like "MG*" Or
(ByUser) Like "RN*" Or (ByUser) Like "PS*" Or
(ByUser) Like "OP*" Or (ByUser) Like "JA*" Or
(ByUser) Like "IC*" Or (ByUser) Like "IB*" Or
(ByUser) Like "FO*" Or (ByUser) Like "DV*" Or
(ByUser) Like "CD*" Or (ByUser) Like "BO*" Or
(ByUser) Like "2D*")
)
GROUP BY Acct, TypeID, TranType, AddID
결과 :
Account TranID TranType MaxOfTranTime AddID MaxOfClearTime
12345678 55545124 W 12/12/2011 10:48:43 AM CZ36 12/12/2011 9:45:31 AM
는 SQL 서버의 쿼리 내 ByUsers이 저장되어있는 것을 약간 다릅니다 테이블에서 많은 수의 검색어에 대한 타이핑을 최소화 할 수 있습니다.
SELECT C.Acct
, C.RequestId
, C.TypeCode
, Max(C.TranTime) as MaxTranTime
, C.AddUserId
, Max(C.ClearDate) As MaxClearDate
FROM Cleared C
WHERE EXISTS (SELECT *
FROM UserIdFilter U
WHERE ByUserId LIKE U.UserId)
GROUP BY Acct, RequestId, TypeCode, AddUserId
SQL 서버의 결과는 :이 통과되면
Account TranID TranType MaxOfTranTime AddID MaxOfClearTime
12345678 55545124 W 12/12/2011 10:48:43 AM CZ36 12/12/2011 10:48:43 AM
그것은 나에게 보인다 SQL 서버 12/12/2011 오전 10시 48분 43초의 MaxOfClearTime을 받고 올바른지 그러나 나는 무엇인가 놓치고 있냐? 액세스 프로세스가 MAX()
입니까? 나는 이것으로 나의 마음을 잃어 버리고있는 것처럼 느껴진다. 그래서 이것에 대한 다른 시각은 위대 할 것이다.
첫 번째에서는 'Max (ClearTime) AS MaxOfClearTime'을 사용하고 두 번째에서는 'Max (C.ClearDate) As MaxReasClearDate'를 사용하는 것으로 보입니다. – ysrb
@ysrb 그들은 동일합니다. , 사이트에 게시하기 전에 데이터를 제거해야합니다. 나는 그것을 바로 잡았다 – Taryn
"SELECT * FROM UserIdFilter U WHERE ByUserId LIKE U.UserId"는 첫 번째 쿼리에서와 동일한 값을 제공합니까 ?? –