如何从单个列中的完全连接获取所有 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;
我正在尝试从单个列中的两个测试 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;