Перебирайте таблицу и добавляйте записи в зависимости от условий - PullRequest
0 голосов
/ 26 октября 2018
Table A (id, rollNumber, spaces)

пример данных

1 1 A
2 1 B
3 1 C
4 2 A
5 3 A

Для каждого номера ролика должно быть 3 пробела, а именно A, B, C. Однако в настоящее время записи не соответствуют. У некоторых это есть, а у некоторых нет.

Я должен перебрать таблицу и добавить пробелы B, C для любого rollNumber, у которого его нет.

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Один из подходов - создать таблицу календаря, содержащую все данные, которые вы ожидаете увидеть.Затем используйте MINUS с INSERT INTO ... SELECT для заполнения отсутствующих данных.

INSERT INTO yourTable (rollNumber, spaces)
SELECT r.rollNumber, s.spaces
FROM
(
    SELECT DISTINCT rollNumber FROM yourTable
) r
CROSS JOIN
(
    SELECT 'A' AS spaces UNION ALL
    SELECT 'B' UNION ALL
    SELECT 'C'
) s
LEFT JOIN yourTable t
    ON r.rollNumber = t.rollNumber AND s.spaces = t.spaces
WHERE
    t.rollNumber IS NULL;
0 голосов
/ 26 октября 2018
SELECT *
FROM
  (SELECT DISTINCT rollNumber FROM t) r
  CROSS JOIN
  (SELECT DISTINCT spaces FROM t) s
  LEFT JOIN t
    ON s.spaces = t.spaces
    AND r.rollNumber = t.rollNumber

Подтаблицы r и s извлекают все возможные значения для rollNumber и spaces;CROSS JOIN создает все возможные комбинации этих значений.После этого ЛЕВОЕ СОЕДИНЕНИЕ с исходной таблицей предоставит вам все эти комбинации, по возможности, заполненные исходными данными.

...