SELECT t.* from (
(SELECT COUNT() AS isuser FROM dbo.[User] WHERE PhoneNumber='13321177023')
UNION ALL
(SELECT COUNT()AS isvipuser FROM dbo.VipUser WHERE Phone='13321177023')
UNION ALL
(SELECT COUNT(*) AS isAcadeuser FROM dbo.AcademyUserInfo WHERE PhoneNumber='13321177023')
) t
给每一个查询都加一个标识1,然后根据这个表示聚合后,取个max就相当于行转列了
select max(isuser) as isuser, max(isvipuser ) as isvipuser, max(isAcadeuser ) as isAcadeuser
from(
SELECT t.* from (
(SELECT 1 as flag, COUNT() AS isuser FROM dbo.[User] WHERE PhoneNumber='13321177023')
UNION ALL
(SELECT 1 as flag, COUNT()AS isvipuser FROM dbo.VipUser WHERE Phone='13321177023')
UNION ALL
(SELECT 1 as flag, COUNT(*) AS isAcadeuser FROM dbo.AcademyUserInfo WHERE PhoneNumber='13321177023')
) t
)tt group by tt.flag
既然是多个子查询,就不要 union all 了,直接在第一个查询中,标量子查询,取新的列名就可以了
select
(select sum() from t where ...) as C1,
(select sum() from t where ...) as C2,
SELECT t.* from (
(SELECT COUNT(1) AS isuser,'' as isvipuser,'' as isAcadeuser FROM dbo.[User] WHERE PhoneNumber='13321177023')
UNION ALL
(SELECT '' as isuser,COUNT(1)AS isvipuser,'' as isAcadeuser FROM dbo.VipUser WHERE Phone='13321177023')
UNION ALL
(SELECT '' as isuser,'' as isvipuser,COUNT(*) AS isAcadeuser FROM dbo.AcademyUserInfo WHERE PhoneNumber='13321177023')
) t
union all 查询的字段列名是一样的,要保持一致
SELECT COUNT( 1 ) AS isuser FROM dbo.USER WHERE PhoneNumber = '13321177023'
UNION ALL
SELECT COUNT( 1 ) AS isuser FROM dbo.VipUser WHERE Phone = '13321177023'
UNION ALL
SELECT COUNT(*) AS isuser FROM dbo.AcademyUserInfo WHERE PhoneNumber = '13321177023'