SELECT A.house_addr,A.scode,A.SQ_ID,A.stype,A.fzxm,A.fzdh,A.fzsfz,ROW_NUMBER() OVER(ORDER BY A.id) AS id,A.person_count FROM
(
SELECT tbh.house_addr,tbh.scode,tbh.SQ_ID,tbh.stype,tbh.fzxm,tbh.fzdh,tbh.fzsfz,tbh.id,tbh.person_count
FROM t_BaseHouse tbh
WHERE
tbh.house_addr IN (SELECT tbh2.house_addr FROM t_BaseHouse tbh2 GROUP BY tbh2.house_addr HAVING COUNT(tbh2.house_addr)=1)
--((SELECT COUNT(*) FROM t_BaseHouse tbh2 WHERE tbh.house_addr = tbh2.house_addr)>2)
) A
RIGHT JOIN
(
SELECT DISTINCT(tbh2.house_addr) FROM
t_BaseHouse tbh2 INNER JOIN v_user u2
ON u2.sq_id = tbh2.SQ_ID
WHERE tbh2.last_checker IS NULL
) B
ON B.house_addr = A.house_addr
WHERE A.person_count IS NULL
GO
得出的结果有NULL值,。。。请问哪里出问题了?如下图:
------解决方案--------------------
说明B.house_addr = A.house_addr没有匹配的数据 。
------解决方案--------------------
ON (B.house_addr = A.house_addr and B.house_addr is not null)
------解决方案--------------------
试试这个:
ON B.house_addr = A.house_addr AND A.person_count IS NULL
------解决方案--------------------
没有匹配不是也应该返回B表的行吗?B表所有行都是有数据的啊。
------解决方案--------------------
楼上2位的方法都试过了。还是会出现330条空记录。331之后都正常。
------解决方案--------------------
看不到具体的数据,也不知道你逻辑。
有left join可以吗?试试看吧。
也有可能2个子查询的结果进行right join就是这样的结果
------解决方案--------------------
这个条件放到 on之后
A.person_count IS NULL