Table 1 Table 2
Class | VAL Class | VAL
------|----- ------|-----
A | 1 A | 1
A | 1 A | 1
A | 1 A | 1
B | 1 B | 1
A | 1
B | 1
C | 1
如果我有两个表,我需要结果如下表所示 需要的结果:
Class | T1 | T2
------|-----|-----
A | 4 | 3
B | 2 | 1
C | 1 | 0
我正在尝试此查询,但它无效。
SELECT [Class],COUNT(VAL) FROM dbo.T1 group by [Class])
UNION
SELECT [Class],COUNT(VAL) FROM dbo.T2 group by [Class])
答案 0 :(得分:3)
SELECT COALESCE(a.Class, b.Class) AS [Class], COALESCE(a.T1,0) AS T1, COALESCE(b.T2,0) AS T2
FROM
(SELECT [Class],COUNT(VAL) AS T1 FROM dbo.T1 GROUP BY [Class]) a
FULL OUTER JOIN
(SELECT [Class],COUNT(VAL) AS T2 FROM dbo.T2 GROUP BY [Class]) b
ON a.Class = b.Class
另一种可能的解决方案
SELECT
a.[Class]
, COUNT(a.VAL1) AS T1
, COUNT(a.VAL2) AS T2
FROM (
SELECT [Class], VAL AS VAL1, NULL AS VAL2 FROM dbo.T1
UNION ALL
SELECT [Class], NULL AS VAL1, VAL AS VAL2 FROM dbo.T2
) a
GROUP BY
a.Class;
答案 1 :(得分:1)
另一种方法
declare @table1 table (class varchar(1) null, val int)
declare @table2 table (class varchar(1) null, val int)
insert into @table1 values ('A', 1)
insert into @table1 values ('A', 1)
insert into @table1 values ('A', 1)
insert into @table1 values ('B', 1)
insert into @table1 values ('A', 1)
insert into @table1 values ('B', 1)
insert into @table1 values ('C', 1)
insert into @table2 values ('A', 1)
insert into @table2 values ('A', 1)
insert into @table2 values ('A', 1)
insert into @table2 values ('B', 1)
select t.Class,
(select count(val) from @table1 where class = t.class),
(select count(val) from @table2 where class = t.class)
from ( select class
from @table1 t1
union
select class
from @table2 t1
) t
返回
Class T1 T2
A 4 3
B 2 1
C 1 0
答案 2 :(得分:1)
Select Class, sum(T1) as T1, sum(T2) AS T2
From
(
Select Class, VAL AS T1, 0 as T2
From Table1
Union All
Select Class, 0 as T1, VAL AS T2
From Table2
) A
group by A.Class
答案 3 :(得分:1)
SELECT t1.class,
COUNT(t1.class) AS T1,
X.T2Count AS T2
FROM @table1 t1
OUTER APPLY(
SELECT COUNT(val) AS T2Count
FROM @table2 t2
WHERE t2.class = t1.class
)X
GROUP BY t1.class,X.T2Count
ORDER BY t1.class