2012-07-11 3 views
0

특정 조건에서 일부 테이블에 합류했습니다. 조인에서 제외 된 레코드의 수를 표시 할 수 있는지 알고 싶습니다.필드의 이중 계산없이 동일한 쿼리에서 결합 및 계산

내 질문 : 당신이 볼 수있는

SELECT... 

FROM   dbo.QuickLabDump 
      ... 

      left outer join hermes.lom.dbo.lom_specimen Lom 
       on QuickLabDump.[specimen id] = lom.specimen 
       LEFT outer join SalesDWH.dbo.Isomers Isomers 
       on QuickLabDump.[specimen id] = Isomers.[accession id] 



WHERE  lom.specimen is null 
       and isomers.[accession id] is null... 

난이 개 왼쪽 외부 조인 있습니다.

이 쿼리의 결과 외에 나는 또한 제외 된 hermes.lom.dbo.lom_specimenSalesDWH.dbo.Isomers에서 해당 레코드의 수를 반환하고자합니다.

제외 된 필드의 수는 어떻게 계산합니까?

USE [SalesDWH] 
GO 

/****** Object: View [dbo].[TurnAround] Script Date: 07/10/2012 20:46:40 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 






ALTER VIEW [dbo].[TurnAround] 
AS 
SELECT  dbo.QuickLabDump.[Specimen ID], DATEPART(yyyy, dbo.QuickLabDump.[Date Entered]) AS [Year Entered], 
DATEPART(yyyy, dbo.QuickLabDump.[Date Completed]) AS [year completed], 

CAST(CAST(dbo.QuickLabDump.[Date Entered] AS DATE) 
         AS DATETIME) + CAST(dbo.QuickLabDump.[Time Entered] AS TIME) AS [DateTime Entered], CAST(CAST(dbo.QuickLabDump.[Date Completed] AS DATE) AS DATETIME) 
         + CAST(dbo.QuickLabDump.[Time Completed] AS TIME) AS [DateTime Completed], dbo.QuickLabDump.[Practice Code] AS [QL Practuce Code], 
         dbo.QLMLISMapping.[MLIS Practice ID], DATEPART(m, dbo.QuickLabDump.[Date Entered]) AS [Month Entered], 
         DATEPART(m, dbo.QuickLabDump.[Date Completed]) AS [Month Completed], 
         ROUND(CAST(DATEDIFF(mi, 
         CAST(CAST(dbo.QuickLabDump.[Date Entered] AS DATE) AS DATETIME) + CAST(dbo.QuickLabDump.[Time Entered] AS TIME), 
         CAST(CAST(dbo.QuickLabDump.[Date Completed] AS DATE) AS DATETIME) + CAST(dbo.QuickLabDump.[Time Completed] AS TIME)) AS FLOAT)/60, 0) AS TAT, 
         ROUND(CAST(DATEDIFF(mi, CAST(CAST(dbo.QuickLabDump.[Date Entered] AS DATE) AS DATETIME) + CAST('9:00AM' AS TIME), 


         CAST(CAST(dbo.QuickLabDump.[Date Completed] AS DATE) AS DATETIME) 
         + CAST(dbo.QuickLabDump.[Time Completed] AS TIME)) AS float)/60, 0) 

         AS [Hours TurnAround Since 9AM], TAT9AMStateAdjusted=     



         ROUND(CAST(DATEDIFF(mi, CAST(CAST(dbo.QuickLabDump.[Date Entered] AS DATE) AS DATETIME) 
         + CAST('9:00AM' AS TIME),            
         CAST(CAST(dbo.QuickLabDump.[Date Completed] AS DATE) AS DATETIME) 
         + CAST(dbo.QuickLabDump.[Time Completed] AS TIME)) AS float)/60, 0)       


         +dbo.adjustedtime.timedifference 
         ,dbo.QuickLabDump.[Order Count], CONVERT(VARCHAR(8), DATEADD(D, - (1 * DATEPART(dw, dbo.QuickLabDump.[Date Entered])) + 6, 
         dbo.QuickLabDump.[Date Entered]), 1) AS [Week Ending] 
FROM   dbo.QuickLabDump 
      INNER JOIN dbo.QLMLISMapping 
      ON dbo.QuickLabDump.[Practice Code] = dbo.QLMLISMapping.[Quicklab ID] 
      left outer join dbo.AccountState 
      on dbo.QuickLabDump.[Practice Code]=dbo.AccountState.[Account] 
      left outer join dbo.AdjustedTime 
      ON dbo.AccountState.[state]=dbo.adjustedtime.[state] 

      left outer join hermes.lom.dbo.lom_specimen Lom 
       on QuickLabDump.[specimen id] = lom.specimen 
       LEFT outer join SalesDWH.dbo.Isomers Isomers 
       on QuickLabDump.[specimen id] = Isomers.[accession id] 



WHERE  lom.specimen is null 
       and isomers.[accession id] is null 

       and (dbo.QuickLabDump.[Practice Code] NOT LIKE 'test%') 
       AND (dbo.QuickLabDump.[Specimen ID] NOT LIKE 'of%') 
       AND (dbo.QuickLabDump.Outcome <> 'rejected') 
GROUP BY dbo.QuickLabDump.[Specimen ID], dbo.QuickLabDump.[Date Entered], dbo.QuickLabDump.[Time Entered], dbo.QuickLabDump.[Date Completed], 
         dbo.QuickLabDump.[Time Completed], dbo.QuickLabDump.[Practice Name], dbo.QuickLabDump.[Practice Code], dbo.QuickLabDump.[Order Count], 
         dbo.QLMLISMapping.[MLIS Practice ID],dbo.adjustedtime.timedifference 
HAVING  (dbo.QuickLabDump.[Order Count] = MAX(dbo.QuickLabDump.[Order Count])) OR 
         (dbo.QuickLabDump.[Order Count] IS NULL) 






GO 
+0

어떤 항목을 선택 하시겠습니까? – Bohemian

+0

어떻게 도움이 될지 모르지만 필자는 전체 쿼리를 포함 시켰습니다. –

+0

그룹별로 할 수 있지만 그 모든 열은 ... – Bohemian

답변

1

당신이 찾고 계십니까 : 여기

전체 쿼리입니다?

SELECT  ..., 
      (
       SELECT COUNt(*) FROM hermes.lom.dbo.lom_specimen WHERE specimen = lom.specimen 
      ) AS ColCount 

FROM   dbo.QuickLabDump  
      left outer join hermes.lom.dbo.lom_specimen Lom 
       on QuickLabDump.[specimen id] = lom.specimen 
       LEFT outer join SalesDWH.dbo.Isomers Isomers 
       on QuickLabDump.[specimen id] = Isomers.[accession id] 
WHERE  lom.specimen is null 
       and isomers.[accession id] is null 
1

WHERE 절없이 동일한 쿼리를 실행하고 FULL OUTER JOIN을 사용하면 선택 가능한 유니버스의 모든 행을 얻을 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. –

관련 문제