一种方法是生成一个日历表,其中包含您希望显示的所有不同数据。然后,使用 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;
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 ; 交叉连接使这些值的每一个可能的组合。然后,与原始表的左联接将提供所有这些组合,并在可能的情况下填充原始数据。
2条答案
按热度按时间scyqe7ek1#
一种方法是生成一个日历表,其中包含您希望显示的所有不同数据。然后,使用
MINUS
带着一个INSERT INTO ... SELECT
填充丢失的数据。gwbalxhn2#
子表
r
以及s
提取每个可能的值rollNumber
以及spaces
; 交叉连接使这些值的每一个可能的组合。然后,与原始表的左联接将提供所有这些组合,并在可能的情况下填充原始数据。