如何将多个select语句通过union all连接查询出的结果横向展示

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'