2017-08-11 6 views
2

2つのテーブル TableAとTableBは、両方のテーブルで同じ値を持つ列 "filename"です。SQLサーバーの列の合計数

データの出現数のみが異なります。

例えば

|###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クエリを生成する必要があります。このような

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

常に小さな部分にあなたの問題を破るしよう!

あなたの質問は2つの部分で構成されています

1:

  1. がにtableA
  2. から個別のファイルとカウントを取得するには、私たちは、クエリを記述TABLEB
  3. から

を個別のファイルとカウントを取得します。

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 

チェック。ファイル名が一つのテーブルに表示されますが、私はFULL OUTER JOINを使用している他のではないかもしれシナリオをカバーするには:

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 

注:

その後、我々は、クエリを兼ね備えています。 このようなシナリオがない場合、つまり、各ファイル名が各テーブルに少なくとも1回は表示される場合は、INNER JOINを使用する必要があります。

+0

答えを私に教えてくれてありがとう、もう2つの列出力(totalCountとUniqueFileCount)をソリューションに追加してくれてありがとう。 – shishir