2017-08-11 72 views
2

兩個表, TableA和TableB的列「filename」在兩個表中都具有相同的值。Sql Server中列值的總計數

只有數據發生的次數不同。

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查詢,其顯示了不同的文件名以有

數和不同的文件名TOTALCOUNT的數量。

這樣的: enter image description here

使用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 

回答

1

總是試圖打破你的問題爲較小的部分!

你的問題由兩個部分組成:

  1. 從表A獲取不同的文件和計數
  2. 從tableB的

獲取不同的文件和計數我們編寫查詢:

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,因爲它會更快。

+0

感謝您爲我提供的答案,並在解決方案中增加了兩個列輸出(totalCount&UniqueFileCount)。 – shishir