【发布时间】:2018-05-01 16:50:03
【问题描述】:
我有一个一小时内每分钟用户数的数据集,其中仅包含非零条目,我想更新该表以使其包含所有小步舞曲。 目前,如果我插入它而不是导入它,我的第一个希望是这样的:
`
CREATE TABLE table1 (minute INT NOT NULL, users INT NOT NULL);
INSERT INTO table1 (minute, users) VALUES (32,1);
INSERT INTO table1 (minute, users) VALUES (40,1);
INSERT INTO table1 (minute, users) VALUES (41,1);
INSERT INTO table1 (minute, users) VALUES (51,1);
INSERT INTO table1 (minute, users) VALUES (52,1);
`
我希望一小时内的另外 55 分钟与 0 个用户一起显示。范围是(0-59)
帮助我创建了第二张表
`
CREATE TABLE m_fix
(minute INT NOT NULL, users INT NOT NULL);
INSERT INTO m_fix (minute, users) VALUES (0,0);
INSERT INTO m_fix (minute, users) VALUES (1,0);
INSERT INTO m_fix (minute, users) VALUES (2,0);
INSERT INTO m_fix (minute, users) VALUES (3,0);......
`
我能够使用此代码进行选择连接以显示我想要的信息:
`
SELECT
m_fix.minute,
Case
When table1.users IS NULL THEN m_fix.users
ELSE table1.users
END AS users
FROM m_fix
LEFT JOIN table1 ON m_fix.minute=table1.minute;
`
但我想更新我的 table1 而不是运行查询,因为我最终会将这些数据导出到其他地方。 为此,我编写了以下代码:
`
INSERT INTO dbo.table1
SELECT dbo.fix.minute, dbo.fix.users
FROM dbo.fix
LEFT JOIN dbo.table1
ON dbo.fix.minute=dbo.table1.minute
Where dbo.fix.minute!= dbo.table1.minute;
Select * From dbo.table1;
`
它只有我的旧表 1,有 5 行
这只是我的测试用例,我还有几天的数据要处理,所以我想要一个命令,我可以在我导入的每个新表上运行,它添加所有缺少的小步舞曲,用户 = 0
【问题讨论】:
-
好的,我读了几遍,但我仍然不清楚要求。您想用
0替换NULL值吗?我不确定在列被定义为非空的表中如何包含空值。原始表结构是否有所不同?无论如何,解决方案似乎是给列一个默认值(如果需要,您可以使用 case 语句)但我也不清楚您的要求。
标签: sql select missing-data insert-into hour