嵌套查询以获取多列结果

时间:2019-02-26 18:50:09

标签: sql

有两个查询,一个查询基于属性和单位类型收集进来,另一个查询基于相同数据的移出收集。当分别运行时,它们会产生正确的信息(移出为6,移入为11)尝试在select和from语句中嵌套,但没有得到我需要的信息。当嵌套在select中时,每种单位类型都会得到正确的搬出,但是搬入的每一行都是总搬入。我记得这里的嵌套只会返回一个值,但是知道有一种方法可以为每一行返回该值。感谢您的协助。

SELECT 
    p.scode as PropNumber,
    p.saddr1 propname,
    ut.scode as UnitType, 
    COUNT(t.hmyperson) as Moveouts, 
    (
        SELECT COUNT(t.hmyperson) as MoveIns
        FROM 
            tenant t
            JOIN unit u      ON t.hunit = u.hmy
            JOIN property p  ON p.hmy   = u.hproperty
            JOIN unittype ut ON ut.hmy  = u.HUNITTYPE
        WHERE 
            t.dtmovein >= getdate() - 14
            AND p.scode IN ('gsaff')
    ) mi
FROM 
    Property p  
    JOIN unit u ON u.hproperty = p.hmy
    JOIN tenant t ON t.hunit = u.hmy
    JOIN unittype ut ON ut.hmy = u.HUNITTYPE 
WHERE 
    p.scode IN ('gsaff') 
    AND  t.DTMOVEOUT >= getdate()- 14 
GROUP BY 
    ut.scode,
    p.scode,
    p.saddr1

有了这样的数据:

PropNumber       Propname       UnitType    MoveOuts     MoveIns 

1 x tc2 1 11 1 x tc3 2 11 1 x tc4 1 11 1 x tc5 1 11 1 x tc6 1 11 <pre>

“移入”列应显示为 2 5 1个 0 3

1 个答案:

答案 0 :(得分:0)

您需要根据外部查询中正在处理的记录关联子查询。这还要求您在子查询中使用与外部查询中不同的表别名。

很难看到样本数据,但是我希望您需要与外部查询中的所有未聚合列相关联。

尝试更改:

(
    SELECT COUNT(t.hmyperson) as MoveIns
    FROM 
        tenant t
        JOIN unit u      ON t.hunit = u.hmy
        JOIN property p  ON p.hmy   = u.hproperty
        JOIN unittype ut ON ut.hmy  = u.HUNITTYPE
    WHERE 
        t.dtmovein  >= getdate() - 14
        AND p.scode IN ('gsaff')
) mi

收件人:

(
    SELECT COUNT(t.hmyperson) as MoveIns
    FROM 
        tenant t1
        JOIN unit u1      ON t1.hunit = u1.hmy
        JOIN property p1  ON p1.hmy   = u1.hproperty
        JOIN unittype ut1 ON ut1.hmy  = u1.HUNITTYPE
    WHERE 
        t1.dtmovein   >= getdate() - 14
        AND p1.scode  IN ('gsaff')
        AND p1.scode  = p.scode
        AND p1.saddr1 = p.saddr1
        AND ut1.scode = ut.scode
) mi