SQL-запрос для консолидации данных - PullRequest
1 голос
/ 17 октября 2019

У меня проблемы с написанием правильного запроса. Было бы признательно, если кто-то умнее;) тогда я могу помочь мне.

Такое чувство, что это легко, но я просто что-то упускаю ....

, поэтому у меня есть 2 таблицы;

CarColors и CarColorTranslations.

локально у меня это для CarColors (родитель CarDetail)

enter image description here

В настоящее время в этой таблице есть страна, где она находится. Как и красное поле: (Id 5005 и 8006) оба связаны с cardetail 1 и имеют только другое имя (конечно, на другом языке)

Но это не правильная модель. Мне нужно избавиться от CountryLocaleId и Name и поместить это в таблицу CarColorTranslations.

Итак, сначала я написал это:

Insert into CarColorTranslations (Created, CreatedBy, Changed, ChangedBy, CarDetailId, CarColorId, CountryLocaleId, Name)
  select GETDATE(),'migrations', GETDATE(), 'migrations', cc.CarDetailId, cc.Id, cc.CountryLocaleId, Name from CarColors cc

это записывает строки вдругой стол;но я забыл одну вещь;мне нужно объединить данные в цвете;смысл;Id 5005 и 8006 должны быть одним;поэтому мне нужно избавиться от 8006 (или другой). Но в этот момент я потеряю родителя из одной записи в CarColorTranslations ..

CarColorTranslations имеет эти несколько свойств

CarDetailId (FK cardetail)
CarColorId (FK CarColor)
CountryLocaleId (FK countryLocale)
Name (Real translated value)

для консолидации данных и записи запросов в CarColortranslations;комбинированный ключ для сопоставления: CarDetailId, HexColorCode, ColorCombinationId, Price

, как вы видите;следующая запись (9005) другого цвета - для той же машины - и не должна соответствовать другой.

Надеюсь, что все ясно.

Спасибо!

1 Ответ

1 голос
/ 17 октября 2019

Во-первых, я упомяну, что я не думаю, что столбец CarDetailId необходим в CarColorTranslations, так как он уже доступен в родительском элементе CarColors.

Для INSERT, я думаю, что-то вроде этоговы бы искали:

Insert into CarColorTranslations
(
    Created
    , CreatedBy
    , Changed
    , ChangedBy
    , CarDetailId
    , CarColorId
    , CountryLocaleId
    , Name
)

select
    GETDATE()
    ,'migrations'
    , GETDATE()
    , 'migrations'
    , cc.CarDetailId
    , MIN(cc.Id) OVER (PARTITION BY CarDetailId, HexColorCode, ColorCombinationId, Price)
    , cc.CountryLocaleId
    , Name
from CarColors cc

Затем вы можете заняться чем-то вроде ЛЕВОГО СОЕДИНЕНИЯ на CarColorId для УДАЛЕНИЯ записей CarColors, которые больше не используются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...