2012-08-01 5 views
0

여기에 두 가지 간단한 쿼리입니다병합 이름 쿼리

SELECT EntityID, EntityName FROM EntityRelations.Entities 
WHERE EntityID IN (SELECT ModifiedByEntityID FROM EntityRelations.AssistanceFlags af WITH (nolock) 
    JOIN EntityRelations.Entities et WITH (nolock) ON af.EntityId = et.EntityId 
WHERE ModifiedDate BETWEEN '6/1/12 3:00 AM' 
         AND '8/1/12 2:59 AM') 

SELECT EntityName, Note, ModifiedByEntityID, ModifiedDate FROM EntityRelations.AssistanceFlags af WITH (nolock) 
    JOIN EntityRelations.Entities et WITH (nolock) ON af.EntityId = et.EntityId 
WHERE ModifiedDate BETWEEN '6/1/12 3:00 AM' 
         AND '8/1/12 2:59 AM' 
ORDER BY ModifiedDate ASC 

enter image description here 첫 번째는 내가 ModifiedByEntityID 필드에 두 번째 쿼리에 미끄러 싶은 이름의 작은 테이블을 제공합니다 , 숫자 대신 이름이 표시됩니다. JerryB에 의해

답변

1
SELECT EntityName, Note, X.EntityName , ModifiedByEntityID, ModifiedDate FROM EntityRelations.AssistanceFlags af WITH (nolock) 
    JOIN EntityRelations.Entities et WITH (nolock) ON af.EntityId = et.EntityId 
LEFT OUTER JOIN (SELECT EntityID, EntityName FROM EntityRelations.Entities 
     WHERE EntityID IN (SELECT ModifiedByEntityID FROM EntityRelations.AssistanceFlags af WITH (nolock) 
     JOIN EntityRelations.Entities et WITH (nolock) ON af.EntityId = et.EntityId 
     WHERE ModifiedDate BETWEEN '6/1/12 3:00 AM' 
           AND '8/1/12 2:59 AM'))X ON X.EntityID = ModifiedByEntityID 
WHERE ModifiedDate BETWEEN '6/1/12 3:00 AM' 
         AND '8/1/12 2:59 AM' 
ORDER BY ModifiedDate ASC 

편집이 :, 덕분에 나는 모호한 엔티티 이름 메시지를 받고, 그래서 나는이에 적응하고 완벽하게 작동하고 :

DECLARE @FROM DATETIME, @TO DATETIME 

    SET @FROM = '6/1/12 3:00 AM' 
    SET @TO = '8/1/12 3:00 AM' 

SELECT et.EntityName, Note, X.EntityName "CSR", ModifiedDate FROM EntityRelations.AssistanceFlags af WITH (nolock) 
    JOIN EntityRelations.Entities et WITH (nolock) ON af.EntityId = et.EntityId 
LEFT OUTER JOIN (SELECT EntityID, EntityName FROM EntityRelations.Entities 
     WHERE EntityID IN (SELECT ModifiedByEntityID FROM EntityRelations.AssistanceFlags af WITH (nolock) 
     JOIN EntityRelations.Entities et WITH (nolock) ON af.EntityId = et.EntityId 
     WHERE ModifiedDate BETWEEN @FROM AND @TO))X ON X.EntityID = af.ModifiedByEntityID 
WHERE ModifiedDate BETWEEN @FROM AND @TO 
ORDER BY ModifiedDate ASC 
1

을 할 수 있습니다 하나에 불과 JOIN 두 쿼리 :

SELECT EntityName, Note, ModifiedByEntityID, e.EntityName, ModifiedDate 
FROM EntityRelations.AssistanceFlags af WITH (nolock) 
JOIN EntityRelations.Entities et WITH (nolock) 
    ON af.EntityId = et.EntityId 
LEFT JOIN 
(
    SELECT EntityID, EntityName 
    FROM EntityRelations.Entities 
    WHERE EntityID IN (SELECT ModifiedByEntityID 
        FROM EntityRelations.AssistanceFlags af WITH (nolock) 
        JOIN EntityRelations.Entities et WITH (nolock) 
         ON af.EntityId = et.EntityId 
        WHERE ModifiedDate BETWEEN '6/1/12 3:00 AM' AND '8/1/12 2:59 AM') 
) e 
    ON ModifiedByEntityID = e.EntityID 
WHERE ModifiedDate BETWEEN '6/1/12 3:00 AM' AND '8/1/12 2:59 AM' 
ORDER BY ModifiedDate ASC 
1

두 가지 쿼리를 결합하여 원하는 필드를 얻는 것입니다.

select a.EntityName,a.Note,b.EntityID,a.ModifiedDate 
from 
(
SELECT EntityID, EntityName FROM EntityRelations.Entities 
WHERE EntityID IN (SELECT ModifiedByEntityID FROM EntityRelations.AssistanceFlags af WITH (nolock) 
    JOIN EntityRelations.Entities et WITH (nolock) ON af.EntityId = et.EntityId 
WHERE ModifiedDate BETWEEN '6/1/12 3:00 AM' 
         AND '8/1/12 2:59 AM') 
) as b 
inner join 
(
SELECT EntityName, Note, ModifiedByEntityID, ModifiedDate FROM EntityRelations.AssistanceFlags af WITH (nolock) 
    JOIN EntityRelations.Entities et WITH (nolock) ON af.EntityId = et.EntityId 
WHERE ModifiedDate BETWEEN '6/1/12 3:00 AM' 
         AND '8/1/12 2:59 AM' 

) as a 
on b.EntityID = a.ModifiedByEntityID 
ORDER BY a. ModifiedDate ASC 

물론 이것은 느린 쿼리이지만 작은 테이블에서 작업 할 때 도움이됩니다.