これが SQL 関数です。複雑で申し訳ありません。
SELECT [Codes].[Description], RawData.FS, COUNT(*) As 'Total Units'
FROM RawData, Codes, Categories
WHERE RawData.ACR = Codes.Name
AND Codes.CategoryName = 'ACR'
GROUP BY [Codes].[Description], [RawData].[FS]
ORDER BY [RawData].[FS]
説明には、各列のテーブル RawData で使用されるコードを含む Codes テーブルがあります。Categories という 2 番目のテーブルは、これらすべての列を追跡し、Codes.CategoryName は Categories.Name の FK です。基本的に、RawData のコード化された値ごとに 1 つのルックアップ テーブルを作成します。
フィールド RawData.FS には、NULL、1、2 の 3 つの値があります。RawData.ACR には、1 エーカー未満、1 ~ 10 エーカー、> 10 エーカーの記述に対応する 3 つの値があります。上記のクエリは正しい結果を返します
Description FS Total Units
House on less than one acre 57080
House on one to less than ten acres 4760
House on ten acres or more 880
House on less than one acre 1 31496
House on one to less than ten acres 1 4312
House on ten acres or more 1 360
House on less than one acre 2 594404
House on one to less than ten acres 2 74688
House on ten acres or more 2 9104
ここでの課題は、SQL をやり直して、3 セットの 3 行ではなく、FS の値に対応する列になるようにすることです。つまり、ヘッダーは (最初の行の場合);
Description FS=NULL FS=1 FS=2
House on less than one acre 57080 31496 594404
もう少しヘルプとして、カテゴリとコード構造を作成するための SQL を次に示します。
CREATE TABLE Categories (
[Name] NVARCHAR(50) PRIMARY KEY,
[Description] NVARCHAR(200)
)
CREATE TABLE Codes (
[Name] NVARCHAR(50),
[CategoryName] NVARCHAR(50) FOREIGN KEY REFERENCES Categories(Name),
[Description] NVARCHAR(200) )
RawData のすべてのフィールドはコード化されています (実際、データ ディクショナリはhttp://www.census.gov/acs/www/Downloads/data_documentation/pums/DataDict/PUMS_Data_Dictionary_2009-2011.pdfにあります)。これは、古典的な SQL パズルの 1 つです。