2013-03-19 31 views
1

我已经编写了一个查询来从联合检索结果。但它显示了两行的结果并将空列留为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

这是MySQL还是SQL Server? – 2013-03-19 12:25:38

回答

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 
+0

这是有用的,但我有其他很多的联盟价值,我必须在一个字段中显示将工作 – 2013-03-19 12:41:33

+0

如果您有来自每个子查询的多个列,您可以使用子查询作为一个表。 – aaroncatlin 2013-03-19 12:48:22

+1

感谢人作为子查询它的工作非常感谢 – 2013-03-19 13:15:34

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 
+0

我不明白它请你能表达一些 – 2013-03-19 12:44:03

+0

Common Table Expressions值得了解 - http://msdn.microsoft.com/en-us/library/ms190766%28v = SQL.105%29.aspx – 2013-03-19 13:03:24

相关问题