【发布时间】:2018-07-04 20:30:49
【问题描述】:
我在 sql 中有 3 个查询:
第一个查询:
select t1ID ,AVG(t2score) AS AVG1
from T1
WHERE t1m1 NOT IN (t2m1,t2m2,t2m3) and t1m2 IN (t2m1,t2m2,t2m3)
group by t1ID
结果
+------+------+
| t1ID | AVG1 |
+------+------+
| 1 | 55 |
| 2 | 45 |
| 3 | 73 |
| 4 | 69 |
+------+------+
第二次查询:
select t1ID ,AVG(t2score) AS AVG2
from T1
WHERE t1m2 NOT IN (t2m1,t2m2,t2m3) and t1m1 IN (t2m1,t2m2,t2m3)
group by t1ID
结果
+------+------+
| t1ID | AVG2 |
+------+------+
| 1 | 68 |
| 2 | 56 |
| 3 | NULL |
| 4 | NULL |
+------+------+
第三次查询
select t1ID ,AVG(t2score) AS AVGt3
from T1
WHERE t1m3 NOT IN (t2m1,t2m2,t2m3) and t1m1 IN (t2m1,t2m2,t2m3)
group by t1ID
结果
+------+------+
| t1ID | AVG3 |
+------+------+
| 1 | NULL |
| 2 | 70 |
| 3 | NULL |
| 4 | NULL |
+------+------+
如何组合这三个语句,以便像这样将这些结果加在一起(每个 AVG 分数在不同的列中)
期望的结果:
+------+------+------+------+
| t1ID | AVG1 | AVG2 | AVG3 |
+------+------+------+------+
| 1 | 55 | 68 | NULL |
| 2 | 45 | 56 | 70 |
| 3 | 73 | NULL | NULL |
| 4 | 69 | NULL | NULL |
+------+------+------+------+
【问题讨论】:
-
使用
case表达式进行条件聚合。 -
你的 IN 子句的内容是文字还是列标识符?
标签: sql sql-server ssms