创建一个用其他表的记录计数填充的表
Posted
技术标签:
【中文标题】创建一个用其他表的记录计数填充的表【英文标题】:Creating a table populated with record counts from other tables 【发布时间】:2020-07-17 17:16:32 【问题描述】:我想验证 2 个(或更多)表每天的计数相同。我认为对每个表执行 SELECT 计数并将它们报告为临时表中它们自己的命名列中的值会很有效,即使只是观察结果窗口中的数字
CREATE TABLE #sync_count (mst_cnt AS varchar(5), info_cnt AS varchar(5));
INSERT INTO #sync_count (mst_cnt, info_cnt)
VALUES (
SELECT Sum(SRV_MST.SRV_MACID) AS mst_cnt FROM SRV_MST,
SELECT Sum(SRV_INFO.SRV_MACID) AS info_cnt FROM SRV_INFO,
))
DELETE #sync_count
期望的输出
SRV_MST | SRV_INFO
===================
22 | 22
===================
不确定我到底哪里出错了。有小费吗?非常感谢
【问题讨论】:
Oracle 不支持表名中的#
,所以我去掉了 PL/SQL 标签。
【参考方案1】:
子查询需要括号:
CREATE TABLE #sync_count (mst_cnt varchar(5), info_cnt varchar(5));
----------------------------------^ as is not used in table declarations.
INSERT INTO #sync_count (mst_cnt, info_cnt)
VALUES ( (SELECT Sum(SRV_MST.SRV_MACID) AS mst_cnt FROM SRV_MST),
(SELECT Sum(SRV_INFO.SRV_MACID) AS info_cnt FROM SRV_INFO)
);
最后一个括号前还有一个逗号。
我强烈、强烈、强烈建议您将计数定义为 numbers 而不是 string!
CREATE TABLE #sync_count (mst_cnt int, info_cnt int);
其实你可以不用表声明,直接使用:
SELECT (SELECT Sum(SRV_MST.SRV_MACID) FROM SRV_MST) AS mst_cnt,
(SELECT Sum(SRV_INFO.SRV_MACID) FROM SRV_INFO) AS info_cnt
INTO #sync_count ;
【讨论】:
这非常有效。我确实必须将 sum 更改为 COUNT,因为 SQL 抱怨 sum 操作数的类型不正确。再次感谢!【参考方案2】:你可以这样写:
INSERT INTO #sync_count (mst_cnt, info_cnt)
SELECT
(SELECT Sum(SRV_MST.SRV_MACID) FROM SRV_MST),
(SELECT Sum(SRV_INFO.SRV_MACID) FROM SRV_INFO)
【讨论】:
以上是关于创建一个用其他表的记录计数填充的表的主要内容,如果未能解决你的问题,请参考以下文章