我有一个数据库。为了进行检查,我们有一个脚本来计算不相关的条目。
如果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)条记录。
答案 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