Присоедините таблицу фактов к измерению и создайте новую строку для каждого соединения - PullRequest
0 голосов
/ 06 мая 2020

У меня есть следующие таблицы:

  • Таблица фактов, содержащая обзоры, каждый из которых проверяет один или несколько драйверов
  • Таблица измерений драйвера, которая назначает сегмент для каждого драйвера

Я хотел бы написать сценарий, который объединяет эти таблицы, в котором есть строка для каждого сегмента для каждого идентификатора обзора, как вы можете видеть в таблице TransformedTable ниже

Raw Tables and Desired outcome

Я пытался использовать различные соединения, но не смог добиться желаемого результата. Спасибо

1 Ответ

3 голосов
/ 06 мая 2020

Ваша модель данных неверна, неверна, неверна. Вы должны это исправить! Почему это неправильно?

  • Вы не должны хранить несколько значений в столбце.
  • Вы не должны хранить числа в виде строк.
  • У вас должно быть правильно объявленные отношения внешнего ключа.
  • SQL Сервер (и SQL в целом) имеют ужасные возможности обработки строк.
  • SQL имеет отличный способ хранить списки значений. Это называется ТАБЛИЦА!

Иногда мы зацикливаемся на очень, очень, очень плохих решениях других людей. Если да, вы можете делать то, что хотите, но запрос не будет эффективным:

select rf.reviewid, d.bucket as driver
from reviewfactable rf cross apply
     string_split(rt.driver, ',') s join
     driverdimenstiontable dd
     on s.value = dd.driver;

Вы также можете express это, используя like:

select rf.reviewid, d.bucket as driver
from reviewfactable rf join
     driverdimenstiontable dd
     on concat(',', s.value, ',') like concat('%,' dd.driver, ',%');
...