Sql 计算一个值在多个列中出现的次数

Sql 计算一个值在多个列中出现的次数,sql,ms-access,Sql,Ms Access,鉴于下表: PERSON IS_EMPLOYED IS_MARRIED IS_STUDENT John Y N Y Tom N Y N Rob N N N Ron Y

鉴于下表:

PERSON    IS_EMPLOYED        IS_MARRIED        IS_STUDENT

John        Y                   N                Y 
Tom         N                   Y                N
Rob         N                   N                N
Ron         Y                   Y                Y
如何计算每个人的Y和N的总数,从而得出以下结果

PERSON     TOTAL_Y         TOTAL_N

 John        2               1
 Tom         1               2
 Rob         0               3
 Ron         3               0

我正在使用Access,我可以使用VBA来实现它,但我想知道是否有一个更快速的解决方案可以只用SQL来实现

您可以尝试下面的查询

SELECT
   Person,
   IFF(IS_EMPLOYED = 'Y', 1,0) + IFF(IS_MARRIED = 'Y', 1,0)+ IFF(IS_STUDENT = 'Y', 1,0)  AS TOTAL_Y,
   IFF(IS_EMPLOYED = 'N', 1,0) + IFF(IS_MARRIED = 'N', 1,0)+ IFF(IS_STUDENT = 'N', 1,0)  AS TOTAL_N
FROM Persons;

您可以尝试下面的查询

SELECT
   Person,
   IFF(IS_EMPLOYED = 'Y', 1,0) + IFF(IS_MARRIED = 'Y', 1,0)+ IFF(IS_STUDENT = 'Y', 1,0)  AS TOTAL_Y,
   IFF(IS_EMPLOYED = 'N', 1,0) + IFF(IS_MARRIED = 'N', 1,0)+ IFF(IS_STUDENT = 'N', 1,0)  AS TOTAL_N
FROM Persons;

有几种方法可以做到这一点。联合查询将是一个很好的选择,因为它很容易在将来扩展或添加更多计算:

SELECT
    person,
    sum(iif(yesno='Y', 1, 0)) as Total_Y,
    sum(iif(yesno='N', 1, 0)) as Total_N
FROM
    (     
        SELECT person, is_employed as yesno FROM table
        UNION ALL
        SELECT person, is_married FROM table
        UNION ALL 
        SELECT person, is_student FROM table
    ) AS yesnoquery
GROUP BY person

有几种方法可以做到这一点。联合查询将是一个很好的选择,因为它很容易在将来扩展或添加更多计算:

SELECT
    person,
    sum(iif(yesno='Y', 1, 0)) as Total_Y,
    sum(iif(yesno='N', 1, 0)) as Total_N
FROM
    (     
        SELECT person, is_employed as yesno FROM table
        UNION ALL
        SELECT person, is_married FROM table
        UNION ALL 
        SELECT person, is_student FROM table
    ) AS yesnoquery
GROUP BY person

@我很高兴能帮助你@我很高兴能帮助你!