【问题标题】:How to also retrieve row/record count from following DB2 query?如何从以下 DB2 查询中检索行/记录计数?
【发布时间】:2023-03-20 13:13:01
【问题描述】:

根据以下查询,还需要选择总记录数。我该怎么做呢?


SELECT DISTINCT t.Creator AS TABLE_SCHEMA, t.Name AS Table_Name, c.Name AS COLUMN_NAME, 
c.COLTYPE AS DATA_TYPE, CASE WHEN c.KEYSEQ = 1 THEN 'Primary Key' ELSE NULL END AS CONSTRAINT_TYPE, NULL AS DATA_PRECISION, NULL AS DATA_SCALE 
    FROM SYSIBM.SYSTABLES t 
        INNER JOIN SYSIBM.SYSCOLUMNS c ON c.TBNAME = t.Name
    WHERE t.Creator='MY_SCHEMA_NAME' AND t.Name='MY_TABLE_NAME'

任何帮助将不胜感激,谢谢

【问题讨论】:

  • 您是指编程语言还是仅使用 SQL?
  • 您想如何准确获取总记录数?在所有行具有相同值的附加列中?其他的?
  • 您想获取您的查询返回的表数吗?或者每个表in的行数?
  • @Mark Ba​​rinstein - 是的,所有行的值都相同的附加列。
  • @a_horse_woth_no_name 每个表中的行数

标签: sql db2 record rowcount


【解决方案1】:

对于任何SELECT 声明,包括您的声明:

SELECT T.*, COUNT(1) OVER() AS ROW_COUNT
FROM
(
SELECT DISTINCT t.Creator AS TABLE_SCHEMA, t.Name AS Table_Name, c.Name AS COLUMN_NAME, 
c.COLTYPE AS DATA_TYPE, CASE WHEN c.KEYSEQ = 1 THEN 'Primary Key' ELSE NULL END AS CONSTRAINT_TYPE, NULL AS DATA_PRECISION, NULL AS DATA_SCALE 
    FROM SYSIBM.SYSTABLES t 
        INNER JOIN SYSIBM.SYSCOLUMNS c ON c.TBNAME = t.Name
    WHERE t.Creator='MY_SCHEMA_NAME' AND t.Name='MY_TABLE_NAME'
) T;

【讨论】:

    【解决方案2】:

    根据以下查询,还需要选择总记录数。

    SELECT DISTINCT 似乎是多余的。系统表不应有重复项。如果你得到重复,可能是因为JOIN 条件不完整——你应该加入表名和创建者。

    所以只需使用COUNT(*)

    SELECT COUNT(*) 
    FROM SYSIBM.SYSTABLES t INNER JOIN
         SYSIBM.SYSCOLUMNS c
         ON c.TBNAME = t.Name AND
            c.TBCREATOR = t.TBCREATOR
    WHERE t.Creator = 'MY_SCHEMA_NAME' AND
          t.Name = 'MY_TABLE_NAME';
    

    【讨论】:

    • 我仍然希望能够从同一个查询中选择我需要的其他值
    • @weovibewvoibweoivwoiv。 . .这不是你的问题要问的。这回答了您实际提出的问题。但是,您可以将 count(*) over () 添加到固定查询(使用正确的 join 条件)以添加带有计数的附加列。
    猜你喜欢
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多