Sql 插入零值行
我有以下结构。我想要实现的是,如果出于某种原因,其中一个类别不存在,那么与其说该类别没有行,不如说该类别应该有一个x/y/z为零的行 下面的问题似乎有点复杂-实现这一点的正确方法是什么Sql 插入零值行,sql,Sql,我有以下结构。我想要实现的是,如果出于某种原因,其中一个类别不存在,那么与其说该类别没有行,不如说该类别应该有一个x/y/z为零的行 下面的问题似乎有点复杂-实现这一点的正确方法是什么 TRUNCATE TABLE dbo.xxx; INSERT INTO dbo.xxx values ('cat_1',0.0,0.0,0.0), ('cat_2',0.0,0.0,0.0), ('cat_3',0.0,0.0,0.0), ('cat_4',0.0,0.0,
TRUNCATE TABLE dbo.xxx;
INSERT INTO dbo.xxx
values
('cat_1',0.0,0.0,0.0),
('cat_2',0.0,0.0,0.0),
('cat_3',0.0,0.0,0.0),
('cat_4',0.0,0.0,0.0);
--:: category 1
INSERT INTO dbo.xxx
SELECT Category = 'cat_1',
x = SUM(x),
y = SUM(y),
z = SUM(z)
FROM dbo.yyy x
WHERE DateKey >= period1;
--:: category 2
INSERT INTO dbo.xxx
SELECT Category = 'cat_2',
x = SUM(x),
y = SUM(y),
z = SUM(z)
FROM dbo.yyy x
WHERE DateKey >= period2;
--:: category 3
INSERT INTO dbo.xxx
SELECT Category = 'cat_3',
x = SUM(x),
y = SUM(y),
z = SUM(z)
FROM dbo.yyy x
WHERE DateKey >= period3;
--:: category 4
INSERT INTO dbo.xxx
SELECT Category = 'cat_4',
x = SUM(x),
y = SUM(y),
z = SUM(z)
FROM dbo.yyy x
WHERE DateKey >= period4;
SELECT Category,
x = SUM(x),
y = SUM(y),
z = SUM(z)
INTO #temp
FROM dbo.xxx
GROUP BY Category;
TRUNCATE TABLE dbo.xxx;
INSERT INTO dbo.xxx
SELECT * FROM #temp;
您可以使用
COALESCE
或NVL
来定义NULL
--:: category 1
INSERT INTO dbo.xxx
SELECT Category = 'cat_1',
x = COALESCE (SUM(x),0),
y = COALESCE (SUM(y),0),
z = COALESCE (SUM(z),0)
FROM dbo.yyy x
WHERE DateKey >= period1;
你想要达到的目标并不完全有意义。@astander我认为它是很久以前写的,以至于我错过了Trinimon指出的
COALESCE
函数的明显用途+1不需要group by-但是COALESCE
的加入已经解决了它-令人惊讶的是,你可以在legacy中找到解决方法密码!您的问题与哪个数据库相关?由于TRUNCATE
我以为是ORACLE,但不是,是吗?我只是好奇……;)SQL Server,但我认为脚本是标准的?只是浏览了一些文档-实际上似乎很标准,除了SQLite和其他相当紧凑的数据库。很高兴知道。。。