为单个计数查询 returns 多行
Query returns multiple rows for a single count
我创建了一个每天 return 银行对帐单行数的查询。
由于某种原因,当有报表进来时,有两行相同的银行帐户名称。一行 returns 0 表示总语句行数,另一行 returns 是正确的语句行数。
如果当天没有语句行,则查询仅 return 一行,语句行总数为 0,这是正确的。
请帮忙。
select distinct cb.bank_name,
cba.bank_account_name Bank_Account_Name,
cba.bank_account_num Bank_Account_Number,
le.name Legal_entity_Name,
(select count(csl1.STATEMENT_LINE_ID)
from ce_statement_lines csl1
where to_char(csl1.booking_date,'yyyy/MM/dd') = to_char(:P_Date,'yyyy/MM/dd')
and csl1.STATEMENT_HEADER_ID = CESL.STATEMENT_HEADER_ID
--GROUP BY cba.bank_account_id, csl1.STATEMENT_LINE_ID
) total_statement_line_for_date
from
ce_bank_accounts cba,
xle_entity_profiles le,
CE_STATEMENT_HEADERS CESH,
ce_banks_v cb,
ce_statement_lines CESL
WHERE cba.account_owner_org_id = le.legal_entity_id
and cb.bank_party_id = cba.bank_id
and cba.bank_account_id = CESH.BANK_ACCOUNT_ID
and CESL.STATEMENT_HEADER_ID = CESH.STATEMENT_HEADER_ID
-- GROUP BY cb.bank_name, cba.bank_account_name, cba.bank_account_num, le.name, cba.bank_account_id
order by cba.bank_account_name
|----------------|------------------|------------------ |-------|------|
| Bank Name |Bank Account Name |Bank Account Number|LE Name| Count|
|----------------|------------------|-------------------|-------|------|
| A Name | A Account Name | A Account Number | A LE | 0 |
|----------------|------------------|-------------------|-------|------|
| B Name | B Account Name | B Account Number | B LE | 0 |
|----------------|------------------|-------------------|-------|------|
| B Name | B Account Name | B Account Number | B LE | 17 |
|----------------|------------------|-------------------|-------|------|
| C Name | C Account Name | C Account Number | C LE | 0 |
|----------------|------------------|-------------------|-------|------|
| C Name | C Account Name | C Account Number | C LE | 1 |
|----------------|------------------|-------------------|-------|------|
我更喜欢示例数据,但是 - 如果您对当前查询感到满意并且它可以满足您的要求,但如果有行count
值不是 0
,那么一个简单的选项是
SQL> with test (account_num, le_name, cnt) as
2 -- this represents result of your current query
3 (select 'A', 'A LE', 0 from dual union all
4 select 'B', 'B LE', 0 from dual union all
5 select 'B', 'B LE', 17 from dual union all
6 select 'C', 'C LE', 0 from dual union all
7 select 'C', 'C LE', 1 from dual
8 )
9 -- query you might need
10 select account_num,
11 le_name,
12 sum(cnt) cnt
13 from test
14 group by account_num,
15 le_name
16 order by account_num;
A LE_NAME CNT
- --------- ----------
A A LE 0
B B LE 17
C C LE 1
SQL>
我创建了一个每天 return 银行对帐单行数的查询。
由于某种原因,当有报表进来时,有两行相同的银行帐户名称。一行 returns 0 表示总语句行数,另一行 returns 是正确的语句行数。
如果当天没有语句行,则查询仅 return 一行,语句行总数为 0,这是正确的。
请帮忙。
select distinct cb.bank_name,
cba.bank_account_name Bank_Account_Name,
cba.bank_account_num Bank_Account_Number,
le.name Legal_entity_Name,
(select count(csl1.STATEMENT_LINE_ID)
from ce_statement_lines csl1
where to_char(csl1.booking_date,'yyyy/MM/dd') = to_char(:P_Date,'yyyy/MM/dd')
and csl1.STATEMENT_HEADER_ID = CESL.STATEMENT_HEADER_ID
--GROUP BY cba.bank_account_id, csl1.STATEMENT_LINE_ID
) total_statement_line_for_date
from
ce_bank_accounts cba,
xle_entity_profiles le,
CE_STATEMENT_HEADERS CESH,
ce_banks_v cb,
ce_statement_lines CESL
WHERE cba.account_owner_org_id = le.legal_entity_id
and cb.bank_party_id = cba.bank_id
and cba.bank_account_id = CESH.BANK_ACCOUNT_ID
and CESL.STATEMENT_HEADER_ID = CESH.STATEMENT_HEADER_ID
-- GROUP BY cb.bank_name, cba.bank_account_name, cba.bank_account_num, le.name, cba.bank_account_id
order by cba.bank_account_name
|----------------|------------------|------------------ |-------|------|
| Bank Name |Bank Account Name |Bank Account Number|LE Name| Count|
|----------------|------------------|-------------------|-------|------|
| A Name | A Account Name | A Account Number | A LE | 0 |
|----------------|------------------|-------------------|-------|------|
| B Name | B Account Name | B Account Number | B LE | 0 |
|----------------|------------------|-------------------|-------|------|
| B Name | B Account Name | B Account Number | B LE | 17 |
|----------------|------------------|-------------------|-------|------|
| C Name | C Account Name | C Account Number | C LE | 0 |
|----------------|------------------|-------------------|-------|------|
| C Name | C Account Name | C Account Number | C LE | 1 |
|----------------|------------------|-------------------|-------|------|
我更喜欢示例数据,但是 - 如果您对当前查询感到满意并且它可以满足您的要求,但如果有行count
值不是 0
,那么一个简单的选项是
SQL> with test (account_num, le_name, cnt) as
2 -- this represents result of your current query
3 (select 'A', 'A LE', 0 from dual union all
4 select 'B', 'B LE', 0 from dual union all
5 select 'B', 'B LE', 17 from dual union all
6 select 'C', 'C LE', 0 from dual union all
7 select 'C', 'C LE', 1 from dual
8 )
9 -- query you might need
10 select account_num,
11 le_name,
12 sum(cnt) cnt
13 from test
14 group by account_num,
15 le_name
16 order by account_num;
A LE_NAME CNT
- --------- ----------
A A LE 0
B B LE 17
C C LE 1
SQL>