重命名 SQL 中的结果类别

Renaming result categories in SQL

我有以下查询,它输出称谓为先生/女士的成员的数量和百分比。

我想将结果重命名为 'Male' 而不是 'Mr' 和 Female 而不是 'Ms'。

这可能是一个相当简单的 CASE 事情,但无法让它工作...

SELECT AspNetUsers.Salutation AS Sex, COUNT(AspNetUsers.Salutation) as Total, 
CAST(ROUND((COUNT(AspNetUsers.Salutation)* 100.0 / (SELECT COUNT(*) FROM Member, AspNetUsers WHERE Member.AspNetUserId = AspNetUsers.Id)),1) AS NUMERIC(36,1)) AS Percentage
FROM Member, AspNetUsers
WHERE Member.AspNetUserId=AspNetUsers.Id
GROUP BY Salutation

您完全正确,这是一个简单的 case 表达式,但您还需要按相同的 case 表达式进行分组。

SELECT 
    CASE 
      WHEN AspNetUsers.Salutation = 'Mr' THEN 'Male' 
      WHEN AspNetUsers.Salutation = 'Ms' THEN 'Female' 
      ELSE 'Other'  -- this is of course optional
    END AS Sex, 
    COUNT(AspNetUsers.Salutation) as Total, 
    CAST(ROUND((COUNT(AspNetUsers.Salutation)* 100.0 / (SELECT COUNT(*) FROM Member JOIN AspNetUsers ON Member.AspNetUserId = AspNetUsers.Id)),1) AS NUMERIC(36,1)) AS Percentage
FROM Member
JOIN AspNetUsers ON Member.AspNetUserId = AspNetUsers.Id
GROUP BY 
  CASE 
    WHEN AspNetUsers.Salutation = 'Mr' THEN 'Male' 
    WHEN AspNetUsers.Salutation = 'Ms' THEN 'Female' 
    ELSE 'Other'   -- this is of course optional
  END;

可能可以通过使用公共 table 表达式来改进查询,这样就不必重复 case 表达式,并使用窗口计数代替子查询,但我会把它留给你。