#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-й столбец. Спасибо