我有以下查询。
SELECT *
FROM
(SELECT
Users.ccMailName as [User Name],
(CASE WHEN UserRoleAssigns.Team_ID > 0 THEN (select Team from Teams where team_ID = UserRoleAssigns.team_id) Else "All" END) as Team,
Users.User_WWID [WWID],
Users.Created_Date,
Role,
COUNT(Role) as HasRole
FROM
UserRoles
RIGHT OUTER JOIN
UserRoleAssigns ON UserRoles.Role_ID = UserRoleAssigns.Role_ID
RIGHT OUTER JOIN
Users ON UserRoleAssigns.User_WWID = Users.User_WWID
GROUP BY
Users.ccMailName, Users.Created_Date, Users.User_WWID, Role, UserRoleAssigns.Team_ID
) as Tbl1
PIVOT (
SUM(HasRole)
FOR [Role] IN (
' + @PivotColumnHeaders + '
)
) AS pt
ORDER BY Created_Date desc '
当我运行它时,我收到以下错误:
无效的列名称“全部”。
查询工作正常,没有case语句,只有子查询。基本上,首先我要检查是否UserRoleAssigns.Team_ID > 0
。如果是,则从子查询中获取数据。
否则将值默认为“全部”。
由于
答案 0 :(得分:0)
你可以像这样重写你的SQL:
SELECT *
FROM
(SELECT
Users.ccMailName as [User Name],
(CASE WHEN UserRoleAssigns.Team_ID > 0 THEN UserRoleAssigns.team_id Else 'All' END) as Team,
Users.User_WWID [WWID],
Users.Created_Date,
Role,
COUNT(Role) as HasRole
FROM
UserRoles
RIGHT OUTER JOIN
(select * from UserRoleAssigns u left join select Team from Teams t on u.team_ID=t.eam_ID) UserRoleAssigns
ON UserRoles.Role_ID = UserRoleAssigns.Role_ID
RIGHT OUTER JOIN
Users ON UserRoleAssigns.User_WWID = Users.User_WWID
GROUP BY
Users.ccMailName, Users.Created_Date, Users.User_WWID, Role, UserRoleAssigns.Team_ID
) as Tbl1
PIVOT (
SUM(HasRole)
FOR [Role] IN (
' + @PivotColumnHeaders + '
)
) AS pt
ORDER BY Created_Date desc '
如果你将sql分配给一个变量,我认为你因为枢轴部分的构造而正在做,那么你可能需要通过使用两个单引号来逃避'All'中的单引号,即''All ''