如何从单个列中的完全连接获取所有 ID。 (试图避免 UNION)

How can I obtain all the IDs from a full join in a single column. (Trying to avoid UNION)

我正在尝试从单个列中的两个测试 table 中获取计数。

CREATE TABLE #testA (name VARCHAR(25))  
INSERT INTO #testA VALUES ('A'), ('B'),('C'),('D'),('E'),('F'),('G')
CREATE TABLE #testB (name VARCHAR(25))  
INSERT INTO #testB VALUES ('B'),('C'),('D'), ('F'),('J'), ('I'), ('B'), ('B')

SELECT a.name as names , count(a.name) as A_counts, count(b.name) as B_counts
FROM #testA as a 
  FULL JOIN #testB as b 
ON a.name=b.name
GROUP BY names

目前我收到一个错误:

Invalid column name 'names'.

如果我更改不带别名的查询:

CREATE TABLE #testA (name VARCHAR(25))  
INSERT INTO #testA VALUES ('A'), ('B'),('C'),('D'),('E'),('F'),('G')
CREATE TABLE #testB (name VARCHAR(25))  
INSERT INTO #testB VALUES ('B'),('C'),('D'), ('F'),('J'), ('I'), ('B'), ('B')

SELECT a.name, count(a.name) as A_counts, count(b.name) as B_counts
FROM #testA as a 
  FULL JOIN #testB as b 
ON a.name=b.name
GROUP BY a.name

对于 table #testB.

的所有值,结果显示 Null

您似乎想要:

SELECT COALESCE(a.name, b.name) as name,
       count(a.name) as A_counts, count(b.name) as B_counts
FROM #testA a FULL JOIN
     #testB b 
     ON a.name = b.name
GROUP BY COALESCE(a.name, b.name);

Here 是一个 db<>fiddle.

编辑:

如果要准确计数,需要在加入前进行聚合:

SELECT coalesce(a.name, b.name) as name,
       coalesce(a.cnt, 0) as A_counts, coalesce(b.cnt, 0) as B_counts
FROM (select name, count(*) as cnt
      from testA a
      group by name
     ) a FULL JOIN
     (select name, count(*) as cnt
      from testB b 
      group by name
     ) b
     ON a.name = b.name;