SQL-запрос на основе определенных условий - PullRequest
0 голосов
/ 19 сентября 2019

enter image description here

На рисунке 1 показано текущее состояние ТАБЛИЦЫ A и ТАБЛИЦЫ B.

Текущая реализация заключается в извлечении новых идентификаторов MIds в таблицу Bи скопируйте SqlQuery из базового процесса, в случае нового рынка или существующего рынка.Для этого используется следующий запрос:

SELECT A.MId, B1.Loop, B1.Segment, B1.SqlQuery, B1.UseDefault
FROM TableB B1 WITH (NOLOCK)
INNER JOIN TableA A WITH (NOLOCK) ON B1.MId IN (100, 200) 
                                  AND B1.MId = A.BaseMarket 
                                  AND ISNULL(A.POCId, 0) > 0
LEFT JOIN TableB B2 WITH (NOLOCK) ON A.MId = B2.MId
WHERE B2.MId IS NULL

На рисунке 2 показаны обновленные данные в таблице A и требуемое состояние таблицы B. Требуемая реализация будет выглядеть следующим образом:

  1. Извлечьновые MIds для таблицы B и скопировать SqlQuery из базового процесса, если это новый рынок (XYZ Market - 2001, 2002)
  2. Если конфигурация рынка уже существует в таблице B (Market ABC - 1001 и 1002), затем скопируйте существующую конфигурацию SqlQuery.

Вот полный процесс для таблиц A и B. Базовые конфигурации (100 и 200) в обеих таблицах изначально были вставлены вручную, включая цикл и сегменты.

  1. Введен новый рынок и создан новый MId в таблице A. Предположим, что для Market ABC это 1001 и 1002.

  2. Соответствуетзаписи вставляются в таблицу B для каждого MId, и он копирует данные из базовой конфигурации в таблицу B. Вставленные записи (SqlId - 3 и 4)

  3. SqlQuery столбец в таблице Bобновляется вручную из-за определенного бизнес-запроса.(SqlId - 3 и 4).Следовательно, другой запрос.

  4. Market ABC обновляется во внешнем интерфейсе, что создает две новые записи в таблице A. (MId - 1003 и 1004).Кроме того, создается новый рынок XYZ (MId - 2001 и 2002).

  5. Соответствующие записи, созданные в таблице B, должны ссылаться на базовую конфигурацию для рынка XYZ (SqlId - 7 и 8), посколькуновый рынок, но следует скопировать существующую конфигурацию для Market ABC (MId - 1001 и 1002), поскольку его конфигурация уже существует.

Я ищу предложения, если один запрос может реализовать этотребование с использованием заявления Case.Я буду признателен за вашу помощь!

1 Ответ

0 голосов
/ 19 сентября 2019

Я думаю, под рыночная конфигурация уже существует Вы на самом деле имеете в виду комбинацию MarketName и Type.Итак, вот запрос

SELECT
  A.NewId, B.Loop, B.Segment, B.SqlQuery, B.UseDefault
FROM (
  SELECT
    A1.MId AS NewId, A2.MId AS RefId
  FROM
    TableA A1
  INNER JOIN
    TableA A2
  ON
    (A1.MarketName = A2.MarketName AND A1.Type = A2.Type) -- use your market configuration logic here
  OR
    A1.BaseMarket = A2.BaseMarket
  WHERE
    A1.Mid NOT IN (SELECT MId FROM TableB)
) As A
INNER JOIN
  TableB B
ON (A.RefId = B.MID)

Сначала мы присоединяемся к TableA, чтобы получить эталонный MId здесь RefId.Затем мы соединяем новую производную таблицу с TableB.

Надеюсь, это поможет.Спасибо!

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