HANA SQL 从一个表中找到的多个表中选择计数 (*)

Posted

技术标签:

【中文标题】HANA SQL 从一个表中找到的多个表中选择计数 (*)【英文标题】:HANA SQL Select Count (*) from multiple tables found in a table 【发布时间】:2021-03-11 15:35:20 【问题描述】:
DECLARE VI_CNT INTEGER DEFAULT 0;
DECLARE VI_IDX INTEGER;
DECLARE VI_LIMIT INTEGER;
DECLARE VS_OUTPUTSTRG1 NVARCHAR(500);
DECLARE VS_OUTPUTSTRG2 NVARCHAR(500);


/* ANAGRAFICA TABELLE FLUSSI  */

ANAGRAFICA = SELECT * 
                    FROM (SELECT DISTINCT 
                               ZCSOURSYS,
                               ZTABLE,
                               ROW_NUMBER() OVER (ORDER BY ZCSOURSYS) AS ROW_NB
                            FROM ZDAFNE_INFO);
                                                        

/************ FOR ***********/

SELECT COUNT (ZTABLE) INTO VI_LIMIT FROM :ANAGRAFICA;

FOR VI_IDX IN 1..:VI_LIMIT DO
VI_CNT = :VI_IDX;
SELECT ZTABLE INTO VS_OUTPUTSTRG1 FROM :ANAGRAFICA WHERE ROW_NB = VI_IDX;        
END FOR;

VS_OUTPUTSTRG2 := 'INSERT INTO "TEAMBW"."IFRS17.INTEGRATION.DATA_QUALITY::ZTB_DQ_DAFNE_TEST" SELECT COUNT(*) FROM '||:VS_OUTPUTSTRG1||'';
EXECUTE IMMEDIATE (:VS_OUTPUTSTRG2);

大家好!提前致谢! 对此有任何帮助吗?输出没有插入任何东西......也许我做错了什么?

【问题讨论】:

这个问题与什么 DBMS 相关?代码看起来像是用于 SAP HANA,但问题也有 mysql 和 postgresql 的标签。 您的插入在它之后没有提交,但是您走错了路。 Lars 给了你一个关于如何在 HANA 中获取 count 的答案(这是一个特定的,count 是持久化在元数据中的)。 【参考方案1】:

看起来 OP 想要将表列表的 原始 记录计数存储到另一个表中。

无需使用 SQLScript 即可满足此要求。

SAP HANA 在目录表(如[M_TABLES][1])中的可用表中保留已提交记录的数量。

有了这些信息,INSERT-statement 可以重写如下:

INSERT INTO 
     "TEAMBW"."IFRS17.INTEGRATION.DATA_QUALITY::ZTB_DQ_DAFNE_TEST" 
       (TABLE_NAME, RECORD_COUNT)
(SELECT 
        TABLE_NAME, RECORD_COUNT
 FROM M_TABLES
 WHERE 
   SCHEMA_NAME ='xyz' 
   AND TABLE_NAME IN (SELECT DISTINCT TABLE_NAME 
                      FROM ZDAFNE_INFO)
 );

只要不需要过滤源表中的待计数记录,此解决方案就可以工作。

【讨论】:

感谢您的回答。在发布之前,我已经考虑过这个解决方案。事实是不应该对整个表进行计数,而是按“ID_FILE”分组。在 TABLE_NAME 里面,我有数百万条记录,但正确的信息是获取 ID_FILE 和 RECORD_COUNT。这就是我考虑动态 SQL 的原因。 所以,你问了一件事,得到了答案,但想知道一些不同的东西,这与原始问题中提供的代码无关。 我可能没有正确解释。还是谢谢!

以上是关于HANA SQL 从一个表中找到的多个表中选择计数 (*)的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL:从一个表中选择一个计数,从另一个表中使用子查询缩小选择范围

从多个表中选择多个值的计数

使用联合第 2 部分从多个表中选择计数相关行

从连接表中选择计数

如何在 Asp.net MVC C# 中使用 Linq 从多个表中选择具有最大计数值的记录

一次返回多个动态选择查询