我有一个人员列表,可以发生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,为了简洁起见,我只想把它放在一个好像我能找到它,我想我可以自己做其余的.
也许是这样的:
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)
| 归档时间: |
|
| 查看次数: |
1359 次 |
| 最近记录: |