我有一个人员列表,可以发生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,为了简洁起见,我只把它放在一个就像我能找到一个,我想我可以自己做其余的。答案 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%'