2017-05-12 6 views
0

1つのアプリケーションでは、Id、Name、Countの3つのフィールドを持つテーブルがあります。SQLクエリのリストを取得する方法

Id | Name | Value 
1 | A |  5 
2 | B |  9  
3 | C |  9 
4 | D |  5 
5 | E |  6 
6 | F |  6 

ここから、どのようにしてクロステーブルを得ることができますか?つまり、次のようになります。

Value | Count 
---- | ---- 
5  | 2 
6  | 2 
7  | 0 
8  | 0 
9  | 2 

お願いしますか?

+2

あなたはこれまで何をしようとしましたか? – Donnie

+0

フィールド値の既存の値を取得することはできますが、その間にすべての値を設定する方法はわかりません。次に...カウントを取得する方法はありません... –

+0

値7と8はどこから来ますか?また、使用しているデータベースで質問にタグを付けてください。 –

答えて

1

まず、タリーテーブルを作成する必要があります。そのためにmany methodsがあります。タリー表を使用して、ソース表の最小値と最大値の間のすべての値に番号を付けます。最小値と最大値の間のすべての数値を取得したら、テーブルのバージョンにLEFT JOINが必要です。ここでは、COUNT()GROUP BYを使用して、各値の表示回数を合計します。

以下の表Aは、集計表です。 表Bは、集約されたソース表です。

DECLARE @MinValue INT 
DECLARE @MaxValue INT 
SET @MinValue = (SELECT MIN(Value) FROM dbo.MyTable) 
SET @MaxValue = (SELECT MAX(Value) FROM dbo.MyTable) 

SELECT number as Value, COALESCE(Count,0) AS Count 
FROM (
    SELECT DISTINCT number 
    FROM master..spt_values 
    WHERE number 
    BETWEEN @MinValue AND @MaxValue 
) AS A 
LEFT JOIN (
    SELECT Value, COUNT(Value) AS Count 
    FROM dbo.MyTable 
    GROUP BY Value 
) AS B 
ON A.number = B.value 
+0

テーブルを作成する最良の方法は、指定されていないrdbmsに基づいて大きく異なります。 – Donnie

関連する問題