我有這個查詢連接回表格來計算基於特定條件的分數。在某些情況下,目標表中不存在行中需要返回的行,因此我在下面顯示當前查詢,這會導致性能下降,並且有時不會返回,因爲此特定查詢是SSRS中較大的一組查詢中的子查詢和SQL Server。在這裏的幫助將不勝感激!更有效的方式來查詢不存在的行SQL
SELECT
G.[Name],
G.[ID],
A.IName,
A.ItID,
COUNT(A.IHid) OVER() AS ICount,
G.[AllComplete],
G.[IComplete],
G.[IStatus],
A.[Group],
A.[Status] AS [Status],
A.[Type] AS [Type]
FROM TableA A
INNER JOIN TableG G
ON A.ID = G.ID AND G.id IS Not NULL
WHERE G.[ID] = ('048')
AND NOT (A.ItID = '')
AND NOT (A.[Status] IN ('NA'))
UNION ALL
SELECT 'N/A', 'N/A', 'N/A', 'N/A', 0, NULL, NULL, 'N/A', 'N/A', 'N/A', 'N/A'
WHERE NOT EXISTS (SELECT 1
FROM TableA A
INNER JOIN TableG G
ON A.ID = G.ID AND G.id IS Not NULL
WHERE G.[ID] = ('048')
AND NOT (A.ItID = '')
AND NOT (A.[Status] IN ('NA')))
這整個事情是一個子查詢?你怎麼知道這是傷害表演的部分?你可以在主要查詢之前將它作爲一個cte嗎?在沒有上下文的情況下很難提供很多幫助。 –
通常情況下,「某些行不存在」意味着「LEFT JOIN」,但這裏並不清楚數據總是存在(如果有的話)。特別是如果這是子查詢的一部分,通常你只需返回空集(無行),而不是空行。 –
您的第一個UNION有一個WHERE子句,它與您的第二個UNION具有NOT EXIST相同?謹慎給我們一個你想要在這裏實現的內容的背景?你只是想要一行'N/A'的ID不是不在你的第一個聯盟?如果是這種情況,那麼不需要你的第二個聯盟。 – Isaiah3015