2015-03-03 8 views
0

У меня есть этот запрос, чтобы присоединиться к паре таблиц и получить различные значения, это выглядит примерно так:Получить Distinct из нескольких аналогичных таблиц

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 

Он работает отлично. Тем не менее, у меня есть несколько таблиц транзакций с той же схемой для первого и второго предыдущих лет относительно таблицы транзакций, и я хотел бы видеть разные значения из всех трех таблиц. Например, если я копирую/вставляю этот запрос и меняю [Transactions] на [Transactions_Yr1] или [Transactions_Yr2], тогда я получаю данные, которые хочу получить из этих таблиц. Но я хочу объединить три. Если я попытаюсь присоединиться к ним, я не получу никаких результатов. Я рода понять, почему это не работает, но я не знаю, куда идти отсюда:

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 

Любые советы будут оценены!

+0

Это потому, что вы делаете ВНУТРЕННИЙ JOINS и есть коды событий отсутствуют в одной или нескольких таблиц? Попробуйте LEFT OUTER JOINs и посмотрите, что вы получаете. –

+1

Внутреннее соединение (или объединение вообще) концептуально связано с объединением таблиц в горизонтальном направлении, обычно путем сопоставления общих значений внутри их строк. Союзы (именно то, что вы хотите) - это другой вид объединения, который работает в вертикальном направлении и просто складывает таблицы вместе (наряду с возможностью удаления повторяющихся строк). – shawnt00

+0

@ shawnt00 спасибо за краткое объяснение – tarrball

ответ

5

Try использование UNION ALL clausele, например .:

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 
0

Вы пытались объединить свои транзакционные таблицы вместе? Ссылка: 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 
+0

Союзы были ответом , но было проще объединить их вместе внутри соединения – tarrball

Смежные вопросы