从多个相似表中区分出来

Get Distinct From Multiple Similar Tables

我有这个查询来连接一对 tables 并获得不同的值,它看起来像这样:

SELECT DISTINCT [TrackingCode]
    ,[Opponent]
    ,CONCAT([TrackingCode], ' | ', [Opponent]) AS RowName
    ,[MultiYrEvent] 
    ,[Identifier]
FROM [BUDGET_FY2014].[dbo].[TrackingCodes]

INNER JOIN
(
    SELECT * 
    FROM [BUDGET_FY2014].[dbo].[Transactions]
    WHERE Report='2377010003'
) AS T
ON T.EventCode LIKE CAST(TrackingCodes.TrackingCode AS nvarchar(20))+'%'
ORDER BY TrackingCode ASC

它工作正常。但是,相对于交易 table,我有多个交易 table 在前几年的第一年和第二年具有相同的架构,我希望看到所有三个 [=24] 的不同值=]秒。因此,例如,如果我 copy/paste 此查询并将 [Transactions] 更改为 [Transactions_Yr1][Transactions_Yr2],那么我将从那些 table 中获取我想要的数据。但是,我想把这三个结合起来。如果我尝试全部加入,则不会返回任何结果。我有点明白为什么这不起作用,但我不知道从这里去哪里:

SELECT DISTINCT [TrackingCode]
    ,[Opponent]
    ,CONCAT([TrackingCode], ' | ', [Opponent]) AS RowName
    ,[MultiYrEvent] 
    ,[Identifier]
FROM [BUDGET_FY2014].[dbo].[TrackingCodes]

INNER JOIN
(
    SELECT * 
    FROM [BUDGET_FY2014].[dbo].[Transactions]
    WHERE Report='2377010003'
) AS T
ON T.EventCode LIKE CAST(TrackingCodes.TrackingCode AS nvarchar(20))+'%'

INNER JOIN
(
    SELECT * 
    FROM [BUDGET_FY2014].[dbo].[Transactions_Yr1]
    WHERE Report='2377010003'
) AS T1
ON T1.EventCode LIKE CAST(TrackingCodes.TrackingCode AS nvarchar(20))+'%'

INNER JOIN
(
    SELECT * 
    FROM [BUDGET_FY2014].[dbo].[Transactions_Yr2]
    WHERE Report='2377010003'
) AS T2
ON T2.EventCode LIKE CAST(TrackingCodes.TrackingCode AS nvarchar(20))+'%'

ORDER BY TrackingCode ASC

如有任何建议,我们将不胜感激!

您是否尝试过将您的事务表合并在一起? 参考:https://msdn.microsoft.com/en-us/library/ms180026.aspx

SELECT DISTINCT [TrackingCode]
    ,[Opponent]
    ,CONCAT([TrackingCode], ' | ', [Opponent]) AS RowName
    ,[MultiYrEvent] 
    ,[Identifier]
FROM [BUDGET_FY2014].[dbo].[TrackingCodes]

INNER JOIN
(
    SELECT * FROM(
    SELECT * 
    FROM [BUDGET_FY2014].[dbo].[Transactions]
    WHERE Report='2377010003'
) AS T
ON T.EventCode LIKE CAST(TrackingCodes.TrackingCode AS nvarchar(20))+'%'

Union
(
    SELECT * 
    FROM [BUDGET_FY2014].[dbo].[Transactions_Yr1]
    WHERE Report='2377010003'
) AS T1
ON T1.EventCode LIKE CAST(TrackingCodes.TrackingCode AS nvarchar(20))+'%'

Union
(
    SELECT * 
    FROM [BUDGET_FY2014].[dbo].[Transactions_Yr2]
    WHERE Report='2377010003'
) AS T2
ON T2.EventCode LIKE CAST(TrackingCodes.TrackingCode AS nvarchar(20))+'%'
)
ORDER BY TrackingCode ASC

尝试使用 UNION ALL 子句,例如:

SELECT DISTINCT [FILDS] 
 FROM (
    SELECT * 
    FROM [BUDGET_FY2014].[dbo].[Transactions]
    WHERE Report='2377010003'

    UNION ALL

    SELECT * 
    FROM [BUDGET_FY2014].[dbo].[Transactions_Yr1]
    WHERE Report='2377010003'

    UNION ALL

     SELECT * 
    FROM [BUDGET_FY2014].[dbo].[Transactions_Yr2]
    WHERE Report='2377010003'
    )

ORDER BY TrackingCode ASC