如何通过Java语言修改文本文件?

时间:2019-06-10 07:30:07

标签: java ms-word document

我有一个数据库。为了进行检查,我们有一个脚本来计算不相关的条目。

如果count为0,则表或列没有任何问题。

如果计数为1,则表或列包含一些不相关的数据。我需要删除Word文件中的(0)个条目。

SQL> SELECT COUNT(*) FROM CDSWEB.NBHISTORY WHERE OFFICEID = 593 AND POLICYSTATUS IN (105,110,126,127,128,140,141,142,143,146,153,154,155,156,157,158,159,160,161) AND STAGE  != 9;

  COUNT(*)                                                                      
----------                                                                      
         0                                                                      

Elapsed: 00:00:00.01
SQL> 
SQL> --------------------------------------------------------------------------------
SQL> 
SQL> 
SQL> ---General Rule for BGAs: The Primary Advisor on the first Policy encountered for a contact should be set as the Primary Advisor associated with the contact record unless the Primary Advisor already exists on the Contact record.'(ADDED ON 27TH AUGUST BY SHYAM)-- ---
SQL> 
SQL> SELECT COUNT(*) FROM CONTACT WHERE OFFICEID = 593 AND SUBSYSTEMTYPE IN(1,6)AND PRIMARYAGENT IS NULL AND CONTACTID IN(SELECT CONTACTID FROM INTERESTPARTY WHERE OFFICEID = 593 AND PARTYROLE BETWEEN 1 AND 19 AND HOLDINGID IN(SELECT HOLDINGID FROM INTERESTPARTY WHERE OFFICEID = 593 AND PARTYROLE BETWEEN 10001 AND 10003));

  COUNT(*)                                                                      
----------                                                                      
        69                                                                      

Elapsed: 00:02:28.29
SQL> 
SQL> 
SQL> --------------------------------------------------------------------------------
SQL> ---INTERESTPARTY
SQL> --------------------------------------------------------------------------------
SQL> 
SQL> ---- Here are Total Record Count of Policy does not have Primary Advisor,Insured,Payer,Owner.
SQL> ---- As per SmartOfice Logic, For all converted Policy Should have Primary Advisor,Insured,Payer,Owner.
SQL> --- However, conversion may bring blank Primary Contact. Check the source database for such blank records
SQL> --- and update the release notes to provide this information.
SQL> SELECT COUNT(*) FROM CDSWEB.INTERESTPARTY WHERE OFFICEID = 593 AND PARTYROLE IN (10001,6,1,2) AND CONTACTID IS NULL;

  COUNT(*)                                                                      
----------                                                                      
         0                                                                      

Elapsed: 00:00:00.03
SQL> 
SQL> --- To Verify The All Interestparty Record Are Linked With Policy.
SQL> SELECT COUNT(*) FROM CDSWEB.INTERESTPARTY WHERE OFFICEID = 593 AND HOLDINGID IS NULL;

  COUNT(*)                                                                      
----------                                                                      
         0                                                                      

我需要有一个类似仅计数记录的输出,而不是count(0)条记录。

1 个答案:

答案 0 :(得分:0)

您的问题很难理解,但是经过几次阅读后,我认为您正在尝试基于多个查询生成报告(问题中显示),但只想查看非零的结果计数。

如果我的猜测不正确,请用一个实际的例子来完善您的问题。

首先,这是一个好消息(除非您真的要使用java,ms-word和/或一个文档),您可以在SQL中完成所有这些操作。

您需要使用联合和派生表。这是一个查询,可以满足您的需求。

select qry_name, cnt
from (
  SELECT 'query 1 name' as qry_name, count(*) as cnt
  FROM CDSWEB.NBHISTORY
  WHERE OFFICEID = 593
    AND POLICYSTATUS IN (105,110,126,127,128,140,141,142,143,146,153,154,155,156,157,158,159,160,161)
    AND STAGE  != 9
  group by qry_name

  union all

  SELECT 'query 2 name' as qry_name, count(*) as cnt
  FROM CONTACT
  WHERE OFFICEID = 593
    AND SUBSYSTEMTYPE IN(1,6)
    AND PRIMARYAGENT IS NULL
    AND CONTACTID IN (
      SELECT CONTACTID
      FROM INTERESTPARTY
      WHERE OFFICEID = 593
        AND PARTYROLE BETWEEN 1 AND 19
        AND HOLDINGID IN (
          SELECT HOLDINGID
          FROM INTERESTPARTY
          WHERE OFFICEID = 593
            AND PARTYROLE BETWEEN 10001 AND 10003
          )
      )
  group by qry_name

  union all

  SELECT 'query 3 name' as qry_name, count(*) as cnt
  FROM CDSWEB.INTERESTPARTY
  WHERE OFFICEID = 593
    AND PARTYROLE IN (10001,6,1,2)
    AND CONTACTID IS NULL
  group by qry_name

  union all

  SELECT 'query 4 name' as qry_name, count(*) as cnt
  FROM CDSWEB.INTERESTPARTY
  WHERE OFFICEID = 593
    AND HOLDINGID IS NULL
  group by qry_name
  ) as rep
where cnt > 0
;

它如何工作?

首先,在各个查询中包含字符串文字。字符串文字会在最终输出中使用非零计数来标识查询。

接下来,由于您正在选择“标量”值,因此必须按其分组。许多数据库允许您引用列名,其他数据库则允许您按列位置分组(例如group by 1),其他数据库则需要重复表达式(例如'Query 1 name')。 必须在每个子查询中完成。您可以在qry_name列中使用任意文字,只需使用可唯一标识每个查询的文字即可。

此后,只需将所有查询合并在一起-这将产生四个记录-因为您有四个查询,每个查询返回一个记录。

最后,将整个内容包装在派生表中并生成四个记录,只返回计数为非零的记录。这是派生表位:

select qry_name, cnt
from (
   ... Rest of your four (or more) queries go here)
) as rep
where cnt > 0