SQL Выбирает, где разные столбцы должны быть равны

#sql-server

#sql-сервер

Вопрос:

Мне нужно объединить 2 таблицы, где первичный ключ является ссылкой.

UAP = производственное единство

В первой таблице указана скорость потребления UAP в неделю

 AUTO.D805DATPOR.TRP060H
  

Во второй таблице есть доступный запас UAP, однако в каждой таблице UAP имеют разные имена, но они одинаковы.

 AUTO.D805DATPOR.IC130M
  

Например, в первой таблице у меня есть UAP1, а во второй таблице это называется M1, так что в основном вот ассоциация

 Table1       Table2

UAP1    -    M1
UAP2    -    M2
UAP3    -    M3
UAP4    -    M4
UAP5    -    M5
UAP6    -    M6
UAPP    -    Protos
EXT     -    EXTR
  

вот запрос до сих пор

 SELECT 
    Reference, 
    UAP, 
    CAST(W01 AS Float) AS W01, 
    CAST(W02 AS Float) AS W02, 
    CAST(W01 / 5 AS Float) AS DailyW01, 
    CAST(W02 / 5 AS Float) AS DailyW02, 
    CAST(Stock as Float) AS Stock 
FROM OPENQUERY(MACPAC, 
    'SELECT 
        A.RH6001 as Reference, 
        A.RH6002 as UAP, 
        A.RH6030 as W01, 
        A.RH6031 as W02,
        S.LLBLT1 AS Stock
    FROM AUTO.D805DATPOR.TRP060H AS A
    LEFT JOIN  AUTO.D805DATPOR.IC130M AS S
    ON A.RH6001 = S.LLPPN 
    WHERE (A.RH6001 Not Like ''FS%'')
    AND S.LLBLT1 <> 0') 
  

Мне нужно только как-то сгруппировать записи по ссылке и показать правильный запас для каждого UAP, к которому он принадлежит. Это было бы легко, если бы имена были одинаковыми, но они разные.

Есть ли способ справиться с этим, не создавая много предложений IF?

Вот отдельные запросы

 SELECT * FROM OPENQUERY(MACPAC, 
    'SELECT 
        IC130M.LLPPN AS Referencia, 
        IC130M.LLSTLC AS UAP, 
        IC130M.LLBLT1 AS Stock
    FROM AUTO.D805DATPOR.IC130M IC130M
    WHERE IC130M.LLSTLC IN (''M1'',''M2'',''M3'',''M4'',''M5'',''M6'',''EXTR'',''PROTOS'') 
    AND IC130M.LLBLT1 <> 0 
    ORDER BY IC130M.LLSTLC ASC, IC130M.LLBLT1 DESC')
  

это возвращает это

введите описание изображения здесь

и здесь таблица потребления за неделю

     SELECT * FROM OPENQUERY(MACPAC, 
        'SELECT TRP060H.RH6001 as Referencia, 
                TRP060H.RH6002 as UAP, 
                TRP060H.RH6030 as W01, 
                TRP060H.RH6031 as W02
    FROM AUTO.D805DATPOR.TRP060H TRP060H
    WHERE (TRP060H.RH6001 Not Like ''FS%'') ')
  

введите описание изображения здесь

Комментарии:

1. Почему у вас не было бы внешнего ключа для связывания таблиц, кажется, плохой дизайн.

2. Я знаю, но это связанный сервер, я не могу управлять ими, я только извлекаю данные

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

Ответ №1:

Лучший способ решить эту проблему — просто добавить таблицу связей. Другими словами, создайте новую постоянную таблицу из этого и используйте ее для ОБЪЕДИНЕНИЯ двух имеющихся у вас таблиц:

 UAP1    -    M1
UAP2    -    M2
UAP3    -    M3
UAP4    -    M4
UAP5    -    M5
UAP6    -    M6
UAPP    -    Protos
EXT     -    EXTR
  

Комментарии:

1. Итак, вы говорите, что я должен создать эту таблицу локально, чтобы я мог связать с ней удаленные таблицы?

2. Если вы не можете создать его на удаленном сервере, тогда да.

3. Вероятно, это лучшее решение, поскольку у меня уже есть таблица с именами UAP, просто нужно добавить 2-й столбец. Спасибо