在下面的查詢下面在我的第一次連接中,我將標識符的前3個字符與前綴表進行比較,在我的第二次連接中,其餘字符都放在datacode表中,那麼數據代碼在另一個表中進行驗證。在SQL Server中編寫2個類似的查詢作爲一個查詢
然後我按特定的交易類型和過程以及日期範圍進行過濾。
在我的第二個查詢中,我簡單地過濾了以Q開頭的標識符代碼,並檢查第二個字符是否是數字,然後我使用與上部查詢完全相同的過濾器進行過濾。
這個查詢抓住了我需要的東西,但是我試圖用一種方式重新編寫查詢,我不必從上面的查詢中重複這些過濾器。
SELECT DISTINCT(t1.TrackID),
t1.CreatedDTS, t1.ITEMode, t1.ProcessName, t1.PID,
t4.State, SUBSTRING(t1.ProviderNumber,1,10),
t1.ISA06, t1.ISA08
FROM
PSVEngine.dbo.MessageZoe t1 WITH (NOLOCK)
INNER JOIN
SKU.dbo.CommonPref t2 ON SUBSTRING(t1.PID,1,3) = t2.Prefix
INNER JOIN
SKU.dbo.PIDS t3 ON SUBSTRING(t1.PID, 4, 9) = t3.PIDInfo
INNER JOIN
SKU.dbo.PidInfo t4 ON t3.UID = t4.UID
WHERE
t1.CreatedDTS BETWEEN '2016-04-01 00:00' AND '2016-05-01 00:01'
AND (t1.ProcessName IN ('Falcon','Zepplin') OR t1.ProcessName LIKE 'BKR%')
AND (SUBSTRING(t1.[InfoType], 1, 3) = '340' or SUBSTRING(t1.[InfoType], 1, 3) = '345')
UNION
SELECT DISTINCT(t1.TrackID),
t1.CreatedDTS, t1.ITEMode, t1.ProcessName,
t1.PID, null, SUBSTRING(t1.ProviderNumber, 1, 10),
t1.ISA06, t1.ISA08
FROM
PSVEngine.dbo.MessageZoe t1 WITH (NOLOCK)
WHERE
t1.CreatedDTS BETWEEN '2016-04-01 00:00' AND '2016-05-01 00:01'
AND (t1.ProcessName IN ('Falcon','Zepplin') OR t1.ProcessName LIKE 'BKR%')
AND (SUBSTRING(t1.[TransactionType], 1, 3) = '340' or SUBSTRING(t1.[TransactionType], 1, 3) = '345')
AND **t1.PID like 'Q%' and Isnumeric(SUBSTRING(t1.PID,2,1)) = 1**
不拾取以Q開頭並且第二個字符爲數字的記錄。 –