我正按照一定的标准加入一些表格。我想知道是否还可以显示从联接中排除的那些记录的数量?
我的疑问:
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_specimen
和SalesDWH.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 :(得分: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 :(得分:1)
运行不带WHERE子句的相同查询并使用FULL OUTER JOIN将为您提供可选择Universe中的所有行。