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

时间:2012-02-28 14:54:03

标签: tsql

我有一个人员列表,可以发生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

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

Person  TypeRes1
A06     48
A04     48
A07     48
A08     48
A05     48

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

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

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

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

1 个答案:

答案 0 :(得分:5)

也许是这样的:

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