从联合查询获取单行中的字段

时间:2013-03-19 12:22:18

标签: mysql sql sql-server

我编写了一个从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)

2 个答案:

答案 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