Соединение двух результатов sql - PullRequest
0 голосов
/ 07 ноября 2019

У меня два запроса, и оба работают с двумя таблицами с похожими столбцами, Запрос 1 дает следующие результаты, поскольку в результате 46 строк - часть из них показана здесь.

enter image description here

Запрос 2 дает следующие результаты:

enter image description here

Теперь я хочу объединить затем следующим образом, результат должен иметь более 46 строк (в зависимости от того, сколько сходств они основали на WC). Оба результата имеют столбец SS (Session for SS).

enter image description here

Это то, что я пробовал,

select ss, wc, wc_efficiency1, wc_efficiency2 from
(
    Query 1
) t1

join

(
    Query 2
) t2
ON t1.ss = t2.ss

Но запрос не выполняется, показывая ошибки, и даже если я внесу некоторые изменения для их устранения, он будет выполняться бесконечно долго, без вывода.

1 Ответ

0 голосов
/ 07 ноября 2019

Существует несколько способов решения этой проблемы, и это зависит от того, являются ли результаты запроса 1 и запроса 2 уникальными, должны ли они отображаться в виде одной строки, или их эффективность должна каким-либо образом агрегироваться / рассчитываться.

Если результаты уникальны (комбинация SS + WC не будет одинаковой), вы можете сделать следующее:

SELECT ss, wc, wc_efficiency
FROM query1
UNION ALL
SELECT ss, wc, wc_efficiency
FROM query2

Если результаты не уникальный, то есть у вас может быть комбинация SS + WC, которая есть в обоих запросах, тогда вы можете сделать следующее:

SELECT 
    q1.ss, 
    q1.wc, 
    q1.wc_efficiency AS [wc_efficiency1],
    q2.wc_efficiency AS [wc_efficiency2]
FROM QUERY1 q1, QUERY2 q2
WHERE q1.ss = q2.ss 
AND q1.wc = q2.wc

ИЛИ

SELECT
    CASE 
        WHEN q1.ss IS NOT NULL THEN q1.ss
        WHEN q2.ss IS NOT NULL THEN q2.ss
    END AS [ss],
    CASE 
        WHEN q1.wc IS NOT NULL THEN q1.wc
        WHEN q2.wc IS NOT NULL THEN q2.wc
    END AS [wc],
    q1.wc_efficiency AS [wc_efficiency1],
    q2.wc_efficiency AS [wc_efficiency2]
FROM QUERY1 q1
    FULL OUTER JOIN QUERY2 q2
    ON q1.ss = q2.ss AND q1.wc = q2.wc

Я предпочитаюпоследний вариант, но оба они должны работать одинаково, и вы можете использовать ISNULL, чтобы установить wc_efficiency, равное 0, если вы не хотите иметь нулевые значения для целей отчетности / построения графиков ...

edit: забыл, что если естьчто-то во втором запросе, а не в первом наборе результатов, вы должны учитывать это, вам может потребоваться другое объединение, но вы также можете использовать оператор case, и я отредактирую третий вариант выше, чтобы отразитьв.

...