我有两个如下表:
表1
Id Table1_Col
1 A
2 B
3 C
4 D
5 E
表2
Id Table1_Col Table2_Col
1 A Test
我想要 Table2 中的(Table1_Col)计数,并且需要查询以下输出:
预期产量
Table1_Col Count_Table2_Col
A 1
B 0
C 0
D 0
E 0
到目前为止,我已经尝试过:
select Table1_Col,Count(Table2_Col) from table1 t1
Left outer join table2 t2 on t1.Table1_Col = t2.Table1_Col
请为此提供适当的解决方案。
答案 0 :(得分:3)
使用聚合方法时,您需要DebugJs
。两个表中还存在import {DebugJs} from '.../path';
const debug = new DebugJs(); // typing and intellisense will work
,因此请为列使用适当的表别名。
以下查询将返回您的预期结果。请也找到演示。
GROUP BY
更新:根据the comment in the post,根据您的小提琴,条件Table1_Col
应该在select T1.Table1_Col, Count(T2.Table2_Col) AS Table2_Col
from table1 t1
Left outer join table2 t2 on t1.Table1_Col = t2.Table1_Col
GROUP BY T1.Table1_Col
而不是t3.visitno=1
中子句,因此以下查询将起作用:
LEFT OUTER JOIN
答案 1 :(得分:1)
尝试此查询:
select t1.Table1_Col,
sum(case when Table2_Col is null then 0 else 1 end) Count_Table2_Col
from Table1_Col t1
left join Table2 t2 on t1.Table1_Col = t2.Table1_Col
group by t1.Table1_Col
答案 2 :(得分:0)
您可以尝试以下方法:
Declare @t table ( id int ,col varchar(50))
insert into @t values (1,'A')
insert into @t values (2,'B')
insert into @t values (3,'C')
Declare @t1 table ( id int ,col varchar(50),col2 varchar(50))
insert into @t1 values (1,'A','TEST')
select t.col,count(t1.id) countT2 from @t t left join @t1 t1
on t.id=t1.id
group by t.col
答案 3 :(得分:0)
这是另一种选择:
select t1.Table1_Col, coalesce(x.cnt, 0) cnt
from table1 t1
left outer join (select Table2_Col, count(*) cnt from table2 group by Table2_Col) x
on x.Table2_Col = t1.Table1_Col;
这里的想法是创建一个table2的内联视图及其计数,然后将其与原始表连接起来。
“ coalesce”是必需的,因为内联视图将仅包含table2中行的记录,因此在您指定要为“ 0”的同时,查询中的任何间隙都将为“ null”。