Table A (id, rollNumber, spaces)
示例数据
1 1 A2 1 B3 1 C4 2 A5 3 A
1 1 A
2 1 B
3 1 C
4 2 A
5 3 A
对于每个卷数,应该有3个空格,即a、b、c。然而,目前的条目并不一致。有的有,有的没有。我必须遍历这个表,为任何没有的rollnumber添加b,c空间。
scyqe7ek1#
一种方法是生成一个日历表,其中包含您希望显示的所有不同数据。然后,使用 MINUS 带着一个 INSERT INTO ... SELECT 填充丢失的数据。
MINUS
INSERT INTO ... SELECT
INSERT INTO yourTable (rollNumber, spaces)SELECT r.rollNumber, s.spacesFROM( SELECT DISTINCT rollNumber FROM yourTable) rCROSS JOIN( SELECT 'A' AS spaces UNION ALL SELECT 'B' UNION ALL SELECT 'C') sLEFT JOIN yourTable t ON r.rollNumber = t.rollNumber AND s.spaces = t.spacesWHERE t.rollNumber IS NULL;
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;
gwbalxhn2#
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
SELECT *
(SELECT DISTINCT rollNumber FROM t) r
(SELECT DISTINCT spaces FROM t) s
LEFT JOIN t
ON s.spaces = t.spaces
AND r.rollNumber = t.rollNumber
子表 r 以及 s 提取每个可能的值 rollNumber 以及 spaces ; 交叉连接使这些值的每一个可能的组合。然后,与原始表的左联接将提供所有这些组合,并在可能的情况下填充原始数据。
r
s
rollNumber
spaces
2条答案
按热度按时间scyqe7ek1#
一种方法是生成一个日历表,其中包含您希望显示的所有不同数据。然后,使用
MINUS
带着一个INSERT INTO ... SELECT
填充丢失的数据。gwbalxhn2#
子表
r
以及s
提取每个可能的值rollNumber
以及spaces
; 交叉连接使这些值的每一个可能的组合。然后,与原始表的左联接将提供所有这些组合,并在可能的情况下填充原始数据。