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

在此处输入图像描述 第一个提供了一个小的名称表,我希望将其滑入 ModifiedByEntityID 字段的第二个查询中,显示名称而不是数字。

4

3 回答 3

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

由 JerryB 编辑:我收到一条模棱两可的 EntityName 消息,所以我对其进行了调整,它运行良好,谢谢:

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 
于 2012-08-01T00:37:23.290 回答
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
于 2012-08-01T00:39:27.153 回答
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

当然,这将是一个缓慢的查询,但如果您在小表上工作会很有帮助。

于 2012-08-01T00:45:12.543 回答