Выбор SQL, где разные столбцы должны быть равны - PullRequest
0 голосов
/ 23 апреля 2019

Мне нужно объединить 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')

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

enter image description here

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

    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%'') ')

enter image description here

1 Ответ

1 голос
/ 23 апреля 2019

Лучший способ решить эту проблему - просто добавить таблицу отношений.Другими словами, создайте из этого новую постоянную таблицу и используйте ее для соединения двух имеющихся у вас таблиц:

UAP1    -    M1
UAP2    -    M2
UAP3    -    M3
UAP4    -    M4
UAP5    -    M5
UAP6    -    M6
UAPP    -    Protos
EXT     -    EXTR
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...