Sql 正在从现有结果集获取计数

Sql 正在从现有结果集获取计数,sql,Sql,我有基于此SELECT语句的结果集: "SELECT ca.mem_no, me.mem_surname, me.mem_first_name, " + "lcc.call_cat, ca.call_location, ca.caller_name, lsc.call_sub_cat, ca.call_id, " + "call_date_start, ca.call_note_start, ca.call_date_end, ca.call_duration, lcs.call

我有基于此SELECT语句的结果集:

"SELECT ca.mem_no, me.mem_surname, me.mem_first_name, " +
    "lcc.call_cat, ca.call_location, ca.caller_name, lsc.call_sub_cat, ca.call_id, " +
    "call_date_start, ca.call_note_start, ca.call_date_end, ca.call_duration, lcs.call_status, " +
    "lca.call_action, lcr.call_res, ca.call_note_res\n" +
    "FROM tblCall ca\n" +
    "INNER JOIN tlkpCallStatus lcs on lcs.callstatus_id = ca.callstatus_id\n" +
    "INNER JOIN tlkpCallAction lca on lca.callaction_id = ca.callaction_id\n" +
    "INNER JOIN tlkpCallResolution lcr on lcr.callres_id = ca.callres_id\n" +
    "LEFT OUTER JOIN tlkpCallSubCategory lsc on lsc.callsubcat_id = ca.callsubcat_id\n" +
    "INNER JOIN tlkpCallCategory lcc on lcc.call_cat_id = ca.call_cat_id\n" +
    "LEFT OUTER JOIN tblMember me on me.mem_no = ca.mem_no\n" +
    "INNER JOIN tblClient cl on cl.client_ident = me.client_ident\n" +
    "WHERE me.client_ident = \'AVA\'" +
    "AND ca.call_date_start BETWEEN '2017-02-01' AND '2017-02-28'\n" +
    "ORDER BY  date(ca.call_date_start);\n"
    ;
它将在一张纸的旁边。。。我意识到我可以通过等待处理完成来获得行数,但是在编写报告之前我需要行数。。我面临着编写另一个基于相同连接和WHERE条件的pre-sql语句来获取COUNT*。但是我不想有一个sql语句的两个副本

有没有一种方法可以让JAVA、Sqlite3从现有结果集中选择COUNT*。。。为了数清行数,不得不去把它们都拿回来,这似乎是一种浪费

可以探测JDBC结果集,并找出该结果集中有多少条记录。但是,它可能会导致整个结果集通过网络读取。因此,如果您真的需要查找计数,我赞成只运行一个单独的COUNT*查询。从网络使用的角度来看,这是非常便宜的,因为您只需要发送一个号码

这里还有一个SQL解决方案,不幸的是,它不适用于SQLite,因为它还不支持分析函数。您可以使用以下查询:

SELECT
    ca.mem_no,
    me.mem_surname,
    me.mem_first_name,
    COUNT(*) OVER () AS total_record_count    -- change here
    ...
FROM

也就是说,我们可以使用COUNT作为分析函数,在运行原始查询的其余部分的同时查找总记录计数。同样,SQLite不可用,但可能是其他数据库的一个选项。

为什么在编写报告之前需要知道计数?您是否在此处询问sql或java代码?@dwir182-resultset是一个java对象,我很好奇它是否可以重新静止。。比如说,如果它是一张“虚拟桌子”。计数是我需要的一件事,但还有其他的。但正如蒂姆所解释的。。更容易回到数据库!!谢谢