在子查询的where子句中使用select查询中的字段

Jet*_*tti 2 t-sql

我有一个人员列表,可以发生4种类型,每种类型有5种分辨率.我正在尝试编写单个查询,以便我可以为每个人提取每种类型/分辨率组合但遇到问题.这是我到目前为止:

SELECT person,
   TypeRes1 = (SELECT COUNT(*) FROM table1 where table1.status = 45)
JOIN personTbl ON personTbl.personid = table1.personid
WHERE person LIKE 'A0%'
GROUP BY person
Run Code Online (Sandbox Code Playgroud)

我已经调整了列名以使其更加通用,但基本上人员表中有几百人,我只想要A01到A09,所以like语句是最简单的方法.问题是我的结果最终是这样的:

Person  TypeRes1
A06     48
A04     48
A07     48
A08     48
A05     48
Run Code Online (Sandbox Code Playgroud)

这是不正确的.我无法弄清楚如何让每个人的列数正确.我尝试过这样的事情:

SELECT person as p,
TypeRes1= (SELECT COUNT(*) FROM table1 
JOIN personTbl ON personTbl.personid = table1.personid
WHERE table1.status = 45 AND personTbl.person = p)
FROM table1
JOIN personTbl ON personTbl.personid = table1.personid
WHERE personTbl.person LIKE 'A0%'
GROUP BY personTbl.person
Run Code Online (Sandbox Code Playgroud)

但这给了我错误:无效的列名'p'.是否可以将p传递到子查询中,还是有其他方法可以执行此操作?

编辑:有19种不同的状态,所以会有19种不同的TypeRes,为了简洁起见,我只想把它放在一个好像我能找到它,我想我可以自己做其余的.

Ari*_*ion 5

也许是这样的:

SELECT 
    person,
    (
        SELECT 
            COUNT(*) 
        FROM 
            table1 
        WHERE 
            table1.status = 45
            AND personTbl.personid = table1.personid
    ) AS TypeRes1 
FROM 
    personTbl
WHERE person LIKE 'A0%'
Run Code Online (Sandbox Code Playgroud)