Sql 如何将联合查询结果正确分组?

Sql 如何将联合查询结果正确分组?,sql,group-by,union,Sql,Group By,Union,我有以下代码: SELECT tenant.scode ,tenant.sunitcode ,rtrim(tenant.sLastName) + ', ' + (tenant.sFirstName) ,charge.total ,tenant.istatus ,tenant.dtmovein FROM tenant LEFT OUTER JOIN ( SELECT sum(CASE WHEN trans.itype = 6 THEN s

我有以下代码:

SELECT tenant.scode
,tenant.sunitcode
,rtrim(tenant.sLastName) + ', ' + (tenant.sFirstName)
,charge.total
,tenant.istatus
,tenant.dtmovein

FROM tenant
LEFT OUTER JOIN (
SELECT sum(CASE 
            WHEN trans.itype = 6
                THEN stotalamount * - 1
            ELSE CASE 
                    WHEN trans.itype = 3
                        THEN stotalamount * - 1
                    ELSE stotalamount
                    END
            END) total
    ,hperson
FROM trans
    where trans.itype in (6,7)
GROUP BY hperson
) charge ON tenant.hmyperson = charge.hperson
WHERE charge.total IS NOT NULL
AND charge.total <> 0
AND tenant.istatus IN (
    0
    ,3
    ,4
    )
and hproperty = 2396

UNION ALL

SELECT  tenant.scode
 ,tenant.sunitcode
,rtrim(tenant.sLastName) + ', ' + (tenant.sFirstName)
,charge.total
    ,tenant.istatus
,tenant.dtmovein

FROM tenant
LEFT OUTER JOIN tenant t2 on (tenant.sleasefield36 = t2.scode)
LEFT OUTER JOIN (
SELECT sum(CASE 
            WHEN trans.itype = 6
                THEN stotalamount * - 1
            ELSE CASE 
                    WHEN trans.itype = 3
                        THEN stotalamount * - 1
                    ELSE stotalamount
                    END
            END) total
    ,hperson
FROM trans
    where itype in (6,7)
GROUP BY hperson
) charge ON t2.hmyperson = charge.hperson
WHERE charge.total IS NOT NULL
AND charge.total <> 0
AND tenant.istatus IN (
    0
    ,3
    ,4
    )
and tenant.hproperty = 2396

ORDER BY total
它从某一房产中收回所有拖欠租金和其他款项以及欠款的租户

我的问题是,其中一处房产最近已售出,因此现在我需要从以前的房产中检索其旧余额,并将其添加到新房产的余额中。我基本上已经正确地运行了,但是两个值1来自旧属性,1来自新属性,在我的结果中显示为两个单独的行。第一个余额金额从第一个查询中检索,第二个余额金额从UNION ALL之后的查询中检索

如何使每个租户的这两行合并余额金额,以便每个租户有一个结果行


提前谢谢!:如果我能提供更多详细信息,请告诉我。

快速、无脑的回答说明您必须给出最后一个、第一个连接的名称,如名称:

SELECT
    scode,
    sunitcode,
    name,
    SUM(total),
    istatus,
    dtmovein
FROM (
 <your first query>
 UNION ALL
 <your second query>
) AS all_data
GROUP BY
    scode,
    sunitcode,
    name,
    istatus,
    dtmovein

快速、无脑的回答说明您必须给出最后、第一个连接的名称,如名称:

SELECT
    scode,
    sunitcode,
    name,
    SUM(total),
    istatus,
    dtmovein
FROM (
 <your first query>
 UNION ALL
 <your second query>
) AS all_data
GROUP BY
    scode,
    sunitcode,
    name,
    istatus,
    dtmovein

加入查询而不是联合查询?有没有可能详细说明?我已经为此工作了好几天了,我相信我已经试过了。我执行的将租户表连接到自身的连接会把这搞砸,除非我使用union。。。至少我是这么想的。或者还有其他解决方案吗?加入查询而不是联合查询?有没有可能详细说明?我已经为此工作了好几天了,我相信我已经试过了。我执行的将租户表连接到自身的连接会把这搞砸,除非我使用union。。。至少我是这么想的。或者还有其他解决方案吗?谢谢!工作得很好非常感谢。工作得很好