Mish1337 Ответов: 1

Join 2 select операторы, которые не имеют ничего общего


У меня есть хранимые процедуры, которые выполняют различные задачи, но я хотел бы собрать некоторые из них вместе, чтобы уменьшить количество хранимых процедур, созданных в базе данных. Многие процедуры основаны на статистике лет и вот вам пример:
Select 
DATENAME(MONTH, DATE_) AS Date,
 count(distinct VATNUMBER) As Count
from 
   (
    select VATNUMBER, DATE_ = min(DATE_)
    from
    ACCOUNTS a inner join CUSTTABLE b
    on a.ID= b.ID
    where ITEMNUMBER in(7055,7056,7059) AND YEAR(a.DATE_) = '2017'
    AND VATNUMBER NOT IN (
    select VATNUMBER
    from
    ACCOUNTS a inner join CUSTTABLE b
    on a.ID= b.ID
    where ITEMNUMBER in(7055,7056,7059)
    AND DATE_ < '2017-01-01'
)
group by VATNUMBER
) d
group by MONTH(DATE_), DATENAME(MONTH, DATE_)
Order by MONTH(DATE_)

Результат за 2017 год:

Date     |   Count
January  |   61
February |   43
March    |   23
April    |   48
etc....

А теперь у меня такая же процедура на 2018 год:

Select 
    DATENAME(MONTH, DATE_) AS Date,
     count(distinct VATNUMBER) As Count
    from 
       (
        select VATNUMBER, DATE_ = min(DATE_)
        from
        ACCOUNTS a inner join CUSTTABLE b
        on a.ID= b.ID
        where ITEMNUMBER in(7055,7056,7059) AND YEAR(a.DATE_) = '2018'
        AND VATNUMBER NOT IN (
        select VATNUMBER
        from
        ACCOUNTS a inner join CUSTTABLE b
        on a.ID= b.ID
        where ITEMNUMBER in(7055,7056,7059)
        AND DATE_ < '2018-01-01'
    )
    group by VATNUMBER
    ) d
    group by MONTH(DATE_), DATENAME(MONTH, DATE_)
    Order by MONTH(DATE_)


Результат за 2018 год:

Date     |   Count
January  |   119
February |   200
March    |   112
April    |   87
etc....

Что я хотел бы сделать, так это поместить оба оператора select в одну и ту же хранимую процедуру. Результат, который я хотел бы увидеть, таков:

Date 2017|   Count  | Date 2018|   Count
January  |   61     | January  |   119
February |   43     | February |   200
March    |   23     | March    |   112
April    |   48     | April    |   87
etc....


Что я уже пробовал:

Я пробовал союз, Союз все безрезультатно или не ожидал ожидаемого результата

CHill60

Что произошло, когда вы использовали UNION?

Mish1337

Он работает нормально, но оба результата отображаются друг на друге или как отдельные результаты

CHill60

Вы также говорите, что они не имеют ничего общего - и все же они идентичны. Единственное, что меняется, - это дата. Я даже не уверен, почему вы используете это не в - вы никогда не попадете в него из-за теста на год(a.DATE_)... или можно ли повторно использовать номер VATNUMBER в следующем году, и вы не хотите включать эти записи?

Mish1337

Правильно, вы можете игнорировать утверждение not in, так как его единственная задача-искать новые номера ватт, которых не существовало в прошлые годы.
Я знаю, что обе таблицы идентичны (прямо сейчас)
Но когда я добавлю статистику 2019 года, то они не будут идентичны, так как 2019 год начнется с января и будет расти с течением времени

Richard Deeming

Это все равно идентично - вы просто меняете диапазон дат.

Jörgen Andersson

Используйте стержень

Mish1337

Можете ли вы продемонстрировать, как

1 Ответов

Рейтинг:
0

Vinod Jangle

Обратитесь к нижеприведенному сообщению, если это вам поможет.

sql server - объединение двух таблиц, не имеющих общих полей - переполнение стека[^]