我编写了一个从union中检索结果的查询。但它将结果显示为两行并将空白列保留为0.但是我需要将结果放在一行而不需要零。任何人都可以帮我这个。以下是我在下面给出的查询,我在两部分中写了>>>
SELECT COUNT(gi.id) AS no_of_group ,
0 AS no_of_borrower
FROM group_info AS gi
WHERE gi.domain_status_id = 1
AND gi.group_status_id = 1
AND gi.group_creation_date <= '2013-01-31'
AND gi.project_info_id = 'BI0000000000000000000001'
AND gi.branch_info_id = 'BI0000000000000000000363'
UNION
SELECT 0 AS no_of_group ,
COUNT(outerlat.member_info_id) AS no_of_borrower
FROM
(SELECT lat.member_info_id,
MAX(lat.id) AS max_member_id
FROM loan_account_transaction AS lat
WHERE lat.project_info_id = 'BI0000000000000000000001'
AND lat.country_id = 1
AND lat.domain_status_id = 1
AND lat.office_info_id = 'BI0000000000000000000363'
AND lat.transaction_date <= '2013-01-31'
GROUP BY lat.member_info_id) AS tempData
INNER JOIN loan_account_transaction AS outerlat ON (tempData.max_member_id = outerlat.id)
WHERE outerlat.loan_status_id IN(1,3,4,5)
答案 0 :(得分:2)
您可以选择每个列作为子查询,如下所示:
SELECT
(SELECT COUNT(gi.id)
FROM group_info AS gi
WHERE gi.domain_status_id = 1 AND
gi.group_status_id = 1 AND
gi.group_creation_date <= '2013-01-31' AND
gi.project_info_id = 'BI0000000000000000000001' AND
gi.branch_info_id = 'BI0000000000000000000363') AS no_of_group
,(SELECT COUNT(outerlat.member_info_id)
FROM
(SELECT lat.member_info_id, MAX(lat.id) AS max_member_id FROM loan_account_transaction AS lat
WHERE lat.project_info_id = 'BI0000000000000000000001' AND lat.country_id = 1 AND lat.domain_status_id = 1
AND lat.office_info_id = 'BI0000000000000000000363' AND lat.transaction_date <= '2013-01-31'
GROUP BY lat.member_info_id) AS tempData
INNER JOIN loan_account_transaction AS outerlat
ON (tempData.max_member_id = outerlat.id )
WHERE outerlat.loan_status_id IN(1,3,4,5)) AS no_of_borrower
答案 1 :(得分:0)
您可以使用CTE(公用表格表达式) -
With AllData as
( SELECT
Count -- etc
AS no_of_group,
0 AS no_of_borrower
UNION ALL
SELECT
0 AS no_of_group,
COUNT -- etc
AS no_of_borrower
)
SELECT
Sum(no_of_group) as no_of_group,
Sum(no_of_borrower) as no_of_borrower
FROM AllData