Как найти и сгруппировать записи с ведущими нулями и их противоположной (дублирующей) записью, у которой в БД удалены ведущие нули - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть БД, в которой правильно отформатированы записи с ведущими нулями.Тем не менее, те же записи, за исключением лидирующих нулей (спасибо Excel), также были добавлены в БД.По сути, создание дублирующих записей, которые следуют неправильному соглашению о нумерации.Итак, в БД есть записи с правильными идентификаторами, такими как ...

01234,
01122,
01323,

, но также с неправильными идентификационными номерами, такими как

1234,
1122,
1323,

Я пытаюсь сделать запрос, который вернетРезультирующий набор группирует эти дубликаты записей в БД следующим образом:

01234,
1234,
01122,
1122,
01323,
1323,

Любые мысли очень ценятся.

1 Ответ

0 голосов
/ 01 апреля 2019

Я использовал CROSS APPLY для повторного запроса к таблице.

Запрос в CROSS APPLY ищет «совпадения», где значения они были бы равны, если бы они оба были CAST как целые числа, но не равны как строковые значения.Затем, чтобы немного очистить результирующий набор, я ограничил его тем, чтобы базовое значение не начиналось с нулевого символа.В противном случае запрос вытягивал совпадения в обоих направлениях, что казалось бесполезным.

Настройка данных:

DECLARE @t TABLE
  (
    idCol VARCHAR(10) NOT NULL
  );

INSERT @t
  (
    idCol
  )
VALUES
  ('01234')
 ,('01122')
 ,('01321')
 ,('1234')
 ,('1122')
 ,('1321')
 ,('00012');

Запрос:

SELECT
  t.idCol
 ,c.idCol
FROM
  @t AS t
CROSS APPLY
  (
    SELECT
      idCol
    FROM
      @t
    WHERE
      idCol = CAST(t.idCol AS INT)
      AND idCol <> t.idCol
      AND LEFT(idCol, 1) <> '0'
  ) AS c;

Результаты:

+-------+-------+
| idCol | idCol |
+-------+-------+
| 01234 |  1234 |
| 01122 |  1122 |
| 01321 |  1321 |
+-------+-------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...