两张桌子, TableA和TableB with column" filename"两个表中的值相同。
只有数据的出现次数不同。
e.g
|###TableA#########|
|id|filename_TableA|
|01|file1 |
|02|file1 |
|03|file2 |
|04|file2 |
|05|file3 |
|06|file4 |
|## TableB ########|
|id|filename_TableB|
|01|file1 |
|02|file1 |
|03|file1 |
|04|file2 |
|05|file2 |
|06|file3 |
|07|file3 |
|08|file4 |
|09|file4 |
我需要生成一个SQL查询,用
显示不同的文件名不同文件名的计数和总计数。
像这样:使用select count(distinct filename_TableA) as totalCount from TableA
给出文件名的totalCount,但是我无法为上面的结果输出生成sql查询。
尝试单桌:
select
filename_TableA,
count(filename_TableA)as filecount_TableA,
totalCount = (
select count(distinct filename_TableA) from TableA
)
from TableA
group by filename_TableA
答案 0 :(得分:1)
始终尝试将您的问题分解为更小的部分!
您的问题由两部分组成:
我们写查询:
1
SELECT filename_TableA, COUNT( * ) AS filecount_TableA
FROM TableA
GROUP BY filename_TableA
2
SELECT filename_TableB, COUNT( * ) AS filecount_TableB
FROM TableB
GROUP BY filename_TableB
检查每个查询的结果是否正确。
然后我们结合查询:
SELECT filename_TableA, filename_TableB, filecount_TableA, filecount_TableB, ISNULL( filecount_TableA, 0 ) + ISNULL( filecount_TableB, 0 ) AS totalCount,
COUNT(*) OVER() AS UniqueFileCount
FROM
( SELECT filename_TableA, COUNT( * ) AS filecount_TableA
FROM TableA
GROUP BY filename_TableA ) AS A
FULL OUTER JOIN
( SELECT filename_TableB, COUNT( * ) AS filecount_TableB
FROM TableB
GROUP BY filename_TableB ) AS B
ON A.filename_TableA = filename_TableB
注意:要涵盖文件名可能出现在一个表中而不出现在另一个表中的情况,我使用了FULL OUTER JOIN
。
如果您没有这样的场景,即每个表中至少出现一次文件名,那么您应该使用INNER JOIN
,因为它会更快。