我有一小时内每分钟用户的数据集,只包含非零条目,我想更新表格,使其包含所有小步骤。 目前我的第一个想要这样,如果我插入它而不是导入它:
`
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;
`
但是我想更新my 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行
这只是我的测试用例,我有更多的数据要处理,所以我想要一个命令我可以在我导入的每个新表上运行,添加所有缺少的minuets with user = 0
答案 0 :(得分:0)
由于NULL不等于NULL,因此WHERE子句无意中过滤了您要检索的数据。
更改此部分:
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 dbo.fix.minute, dbo.fix.users
FROM dbo.fix
LEFT JOIN dbo.table1
ON dbo.fix.minute=dbo.table1.minute
Where dbo.table1.minute IS NULL;
答案 1 :(得分:0)
您想要插入表格中不存在的分钟数,这些分钟数直接转换为:
INSERT INTO dbo.table1
SELECT fix.minute, users
FROM dbo.fix
WHERE NOT EXISTS
(
SELECT *
FROM dbo.table1
WHERE dbo.fix.minute=dbo.table1.minute -- same minute
)
当您希望它们为零时,可以使用COALESCE
简化您的选择:
SELECT
m_fix.minute,
COALESCE(table1.users, 0) AS users
FROM m_fix
LEFT JOIN table1
ON m_fix.minute=table1.minute;