나는 같은 테이블을 가졌다
ParsereplyId Message Callid status EMailid subject
------------------------------------------------------------------------
1 hi 2222 Replied [email protected] Log a cll
2 hello 2222 Replied [email protected] Re:
3 hi2 2222 New [email protected] Re:log a cll
4 hello2 2223 Read [email protected] Log a cldf
5 how r u 2223 New [email protected] Re:Log a
위의 표에서 다음과 같은 출력을 얻고 싶습니다.
ParsereplyId Message Callid status EMailid subject
-------------------------------------------------------------------
3 hi2 2222 New [email protected] Re:log a cll
5 how r u 2223 New [email protected] Re:Log a
다음 쿼리를 시도했습니다. 하지만 Left outer Join에서하고 싶습니다.
SELECT A.[ParsedReplyId]
, A.[EMailId]
, A.[Message]
, A.[CallId]
, [UM_User].[UserName]
FROM IM_IncidentReplyMail AS A
INNER JOIN
(SELECT MAX(ParsedReplyId) AS parseid
FROM [IM_IncidentReplyMail]
GROUP BY [CallId]) AS B
INNER JOIN
[UM_User] ON [UM_User].[EmailId] = A.[EmailId]
WHERE
B.parseid = A.[ParsedReplyId]
내부 조인에 위의 SQL 쿼리를 구현하는 방법 ??
편집 : 위의 실수를 수정했습니다.
UM_USer 테이블에는 username, emailid
두 테이블의 이메일 ID를 기반으로 해당 메일의 사용자 이름을 가져올 수 있습니다.
편집 2 : 내부 조인 대신 왼쪽 외부 조인을 사용할 수 있습니다.
SELECT A.[ParsedReplyId]
, A.[EMailId]
, A.[Message]
, A.[CallId]
, [UM_User].[UserName]
FROM IM_IncidentReplyMail AS A
LEFT OUTER JOIN
(SELECT MAX(ParsedReplyId) AS parseid
FROM [IM_IncidentReplyMail]
GROUP BY [CallId]) AS B
ON 1=1
LEFT OUTER JOIN
[UM_User] ON [UM_User].[EmailId] = A.[EmailId]
WHERE
B.parseid = A.[ParsedReplyId]
여기에서는 쿼리에서 사용하는 올바른 방법이 아닌 1 = 1 조건을 사용했습니다. 그것은 내 코드를 추악하게 만듭니다. 이 문제를 해결하는 데 도움을 요청합니다.
필요한 출력에 따라 쿼리를 수정했습니다.
DECLARE @Table1 TABLE
(Id INT, Message VARCHAR(7), Call INT, status VARCHAR(7), EMail VARCHAR(11), subject VARCHAR(12))
;
INSERT INTO @Table1
(Id, Message, Call, status, EMail, subject)
VALUES
(1, 'hi', 2222, 'Replied', '[email protected]', 'Log a cll'),
(2, 'hello', 2222, 'Replied', '[email protected]', 'Re:'),
(3, 'hi2', 2222, 'New', '[email protected]', 'Re:log a cll'),
(4, 'hello2', 2223, 'Read', '[email protected]', 'Log a cldf'),
(5, 'how r u', 2223, 'New', '[email protected]', 'Re:Log a')
;
SELECT T.Id,
TT.Message,
TT.Call,
TT.status,
TT.EMail,
TT.subject
FROM @Table1 tt
LEFT OUTER JOIN
(
SELECT Id,
MAX(subject) OVER(PARTITION BY call ORDER BY call) subject,
MAX(Message) OVER(PARTITION BY call ORDER BY call) Message FROM @Table1)T
ON T.Id = TT.Id AND T.Message = TT.Message AND T.subject = TT.subject
WHERE T.id IS NOT NULL
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다