自分にはかなり複雑な問題があり、誰かが助けてくれるといいのですが。
PostgreSQLを使用して、ジオメトリのないテーブルからピボットテーブルを作成できるようにしたいと考えています。
シンプルに保つために、ピボットに使用するテーブル構造を表示し、次に、指定されたメソッドを使用して他のものを作成します:)
使用したいフィールドはpostcode_nospace_
、ageband
。
ageband
はpostcode_nospace_
は、各郵便番号のカウントがデータである行です。
2132のレコードがあり、そのうちのいくつかは複数の郵便番号を持っているため、カウントされます。
CREATE TABLE adult_social_care.activities_in_localities_asc
(
ogc_fid integer NOT NULL,
sort numeric(5,0),
ageband character(12),
postcode_nospace_ character(8),
wkb_geometry geometry,
CONSTRAINT activities_in_localities_asc_pkey PRIMARY KEY (ogc_fid)
);
更新:
これは、同じデータを持つExcelピボットテーブルに示されているように、達成したい結果です。
postcode 18_24 25_34 35_44 45_54 55_64 65_74 Total Count
----------------------------------------------------------------------------
BB115DE 1 2 2 3 8
FY38LZ 1 1 2
周りを見回して、次のSQLクエリをコンパイルしました。郵便番号でグループ化し、必要なフィールド名を作成します。ただし、フィールドは空白です。理想的にはtotal_count
列はテーブルの最後にあります。
SELECT * FROM crosstab(
'SELECT postcode_nospace_, ageband, count(ageband) as total_count
FROM adult_social_care.activities_in_localities_asc
GROUP BY postcode_nospace_, ageband
ORDER BY postcode_nospace_'
,$$VALUES ('18-24'::text), ('25-34'), ('35-44'), ('45-54'), ('55-64'), ('65-74'), ('75-84'), ('85-94'), ('95 AND OVER')$$)
AS ct("postcode" text, "18-24" numeric, "25-34" numeric,"35-44" numeric, "45-54" numeric, "55-64" numeric, "65-74" numeric, "75-84" numeric, "85-94" numeric, "95 AND OVER" numeric);
あなたのテーブル定義は言う
...
ageband character(12),
...
つまり、そこの値は'18-24 '
の代わりに '18-24'
。このように、VALUES
リストの項目はテーブルの値と一致しないため、結果として空のテーブルが作成されます。
列の型をもう少しわかりやすいtext
に変更すると(Erwinが指摘するように、値もトリミングされます):
ALTER TABLE activities_in_localities_asc ALTER COLUMN ageband TYPE text;
希望する結果が得られます。