2016-07-05 2 views
0

Просто хотел проверить, был ли более простой способ или лучший способ написать нижеприведенный запрос? Я должен объединить около 10 таблиц MMA_AUDITSUM_STG ниже, я сделал только два. Есть ли у вас возможность набирать все имена столбцов один за другим и включать в себя соединение с MMA_SITE_MST? Я использую SQL Server для хранения данных.Запрос базы данных на SQL Server с UNION ALL

SELECT 
    a.CLIENT_NAME AS [BRAND], a.SITE_NO AS [SITE NO], 
    a.SITE_NAME AS [SITE], 
    c.FILTER_1 AS [AREA], c.FILTER_2 AS [REGION], 
    a.MANAGER, 
    a.AUDIT_DATE AS [db.audit_date], a.THIS_AUDIT_SCORE AS [SCORE], 
    a.ALERTS_FLAG AS [ALERTS], a.REPEAT_FLAG AS [REPEAT ISSUES], 
    a.ACTION_PLAN_FLAG AS [ACTION PLAN FAILURE], 
    a.Cash, a.Revenue, a.Stock, 
    a.[Unaccounted Stock], a.[People & Payroll], 
    a.[Safe], a.[Security], a.[Petty Cash], a.[Tills], 
    a.[Bankings], a.[Sales], a.[Vouchers & Discounting], 
    a.[PDQ], a.[Administration], 
    a.[Stock Verification], a.[Stock Management], a.[Ordering] 
FROM 
    MMA_AUDITSUM_STG_34 As a 
INNER JOIN 
    MMA_SITE_MST AS c ON a.CLIENT_ID = c.CLIENT_ID 
         AND a.SITE_ID= c.SITE_ID 
         AND a.SITE_NAME= c.SITE_NAME 

UNION ALL 

SELECT 
    b.CLIENT_NAME, b.SITE_NO, b.SITE_NAME, 
    c.FILTER_1, c.FILTER_2, 
    b.MANAGER, b.AUDIT_DATE, b.THIS_AUDIT_SCORE, 
    b.ALERTS_FLAG, b.REPEAT_FLAG, b.ACTION_PLAN_FLAG, 
    b.Cash, b.Revenue, b.Stock, b.[Unaccounted Stock], 
    b.[People & Payroll], b.[Safe], b.[Security], 
    b.[Petty Cash], b.[Tills], b.[Bankings], b.[Sales], 
    b.[Vouchers & Discounting], b.[PDQ], b.[Administration], 
    b.[Stock Verification], b.[Stock Management], b.[Ordering] 
FROM 
    MMA_AUDITSUM_STG_35 As b 
INNER JOIN 
    MMA_SITE_MST As c ON b.CLIENT_ID = b.CLIENT_ID 
         AND b.SITE_ID = c.SITE_ID 
         AND b.SITE_NAME = c.SITE_NAME 

Любые мнения приветствуются, как я все еще учусь так что не уверен, если я делаю выше правильно, даже если он получает меня результат мне нужно :)

Спасибо заранее

Джон

+1

Ваш запрос замечательный. Я могу опросить модель данных, которая ставит аналогичные данные в разные таблицы, а не в одну таблицу. –

+1

Вы можете упростить свой вопрос, присоединившись к 'MMA_SITE_MST' к результату' union all' всех таблиц 'MMA_AUDITSUM_STG_ %', но я согласен с Gordon - реальный вопрос в том, зачем использовать разные таблицы для подобных данных? –

+0

Спасибо за ответы, модель данных связана с клиентом, имеющим несколько брендов, однако моя модель данных не имеет брендов так, чтобы настроить их как разных клиентов. Это позволяет мне создавать информационные панели, которые объединяют все или могут фильтроваться по брендам. Я согласен, и оставшуюся часть моих клиентов мне не нужно присоединяться. Спасибо, что подтвердили, что я делаю это правильно :) – Hoube78

ответ

1

IF действительно все отдельные таблицы необходимы, вы можете подумать о создании вида:

CREATE VIEW v_MMA_AuditSum(
    SELECT * FROM MMA_AUDITSUM_STG_34 
    UNION ALL 
    SELECT * FROM MMA_AUDITSUM_STG_35 
    UNION ALL 
    .... 
) 

И после этого присоединитесь к нему на ваш MMA_SITE_MST

SELECT a.CLIENT_NAME 
    ,a.SITE_NO 
    ,a.SITE_NAME 
    ,a.FILTER_1 
    ,a.FILTER_2 
    ,b.* 
    FROM MMA_SITE_MST AS a 
    JOIN cte AS b ON a.CLIENT_ID= b.CLIENT_ID 
       AND a.SITE_ID= b.SITE_ID 
       AND a.SITE_NAME= b.SITE_NAME 
+0

Спасибо, не знал, что вы можете это сделать. Было бы лучше основано на ответах, которые я получил, чтобы создать хранимую процедуру, которая перемещает данные в одну таблицу? В каком-то смысле это будет то же самое, что и ваше создание, но не временное. – Hoube78

+0

Нет, это не одно и то же: процедура, которая копирует данные, производит - как описано - больше данных. в зависимости от количества данных в вашей таблице это может быть огромная сумма, так как у вас будет в два раза больше записей в вашей БД: один раз в исходной позиции, один раз в вашей новой таблице. Создание представления не является временным! Кроме того, данные не будут дублироваться, но запросы будут иметь вид перенаправленных на исходные записи. Другими словами: исходные записи изменяются, и вы также видите изменение в представлении. – Tyron78

+0

Вы также можете ознакомиться с индексированным представлением. Это позволит сохранить данные в актуальном состоянии, и вам не нужно будет запускать хранимый процесс каждый раз, когда вы добавляете данные для его обновления. –

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