Как я могу вставить несколько столбцов из одной таблицы в другую, имея только 1 столбец уникальный / отличный? - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь создать звездообразную схему и в настоящее время работаю над таблицами измерений.Я хочу скопировать несколько столбцов из одной таблицы в другую, но в то же время хочу сделать значения результатов уникальными для одного из столбцов.

Вот таблицы, которые я использую: DWH_PRICE_PAID_RECORDS

CREATE TABLE "DWH_PRICE_PAID_RECORDS" ("TRANSACTION_ID" VARCHAR(50) NOT NULL, "PRICE" INTEGER, "DATE_OF_TRANSFER" DATE NOT NULL, "PROPERTY_TYPE" CHAR(1), "OLD_NEW" CHAR(1), "DURATION" CHAR(1), "TOWN_CITY" VARCHAR(50), "DISTRICT" VARCHAR(50), "COUNTY" VARCHAR(50), "PPDCATEGORY_TYPE" CHAR(1), "RECORD_TYPE" CHAR(1));

 ALTER TABLE "DWH_PRICE_PAID_RECORDS" ADD CONSTRAINT "PK3" PRIMARY KEY ("TRANSACTION_ID");

и DIM_REGION

CREATE TABLE "DIM_REGION" ("REGION_ID" INTEGER generated always as identity (start with 1 increment by 1), "TRANSACTION_ID" VARCHAR(50), "TOWN" VARCHAR(50), "COUNTY" VARCHAR(50), "DISTRICT" VARCHAR(50), "LATITUDE" VARCHAR(50), "LONGITUDE" VARCHAR(50), "COUNTRY_STRING" VARCHAR(50));

ALTER TABLE "DIM_REGION" ADD CONSTRAINT "PK8" PRIMARY KEY ("REGION_ID");

Моя первая попытка состояла в том, чтобы использовать «выбрать отличительные», но при этом удаляются только все дубликаты ВСЕХ столбцов вместе.Я хочу иметь измерение региона, а "город" должен быть идентификатором, чтобы сопоставить DIM_REGION с таблицей фактов на витрине данных, которую я создам позже (она называется DM_PRICE_PAID_RECORDS).

Таблица DWH_PRICE_PAID_RECORDS имеет около 10 тыс. Записейно только 938 уникальных городов.Я хочу иметь эти 938 городов в dim_region в качестве идентификатора вместе с другими столбцами, такими как округ, округ и т. Д.

Это то, что работает, но тогда, конечно, все остальное - NULL, но город:

INSERT INTO DIM_REGION (TOWN) SELECT (town_city) from DWH_PRICE_PAID_RECORDS GROUP BY town_city;

Так что я подумал, что мне нужно только добавить дополнительные столбцы

INSERT INTO DIM_REGION (TOWN, County, District) SELECT town_city, county, district from DWH_PRICE_PAID_RECORDS GROUP BY town_city;

, но когда я это делаю, я получаю это сообщение об ошибке (сообщение об ошибке немецкое, и мне пришлось перевести, извините):

ERROR 42Y36 Column reference: "DWH_PRICE_PAID_RECORDS.COUNTY" is invalid or part of a invalid statement. When using SELECT and GROUP BY the selected columns and statements must be valid group- or aggregation expressions. 

Можете ли вы мне помочь или у вас есть другая идея, как еще я могу получить результат, к которому стремлюсь?

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 03 июня 2019

Если другие 2 столбца не имеют значения, вы можете сделать это:

INSERT INTO DIM_REGION (TOWN, County, District) 
SELECT town_city, MAX(county), MAX(district) 
FROM DWH_PRICE_PAID_RECORDS 
GROUP BY town_city

Это даст вам только 1 строку для каждого города.

1 голос
/ 03 июня 2019

Ты так близко!

INSERT INTO DIM_REGION (TOWN, County, District) SELECT town_city, county, district from DWH_PRICE_PAID_RECORDS GROUP BY town_city, county, district;

Это должно сделать работу.При использовании group by все в списке SELECT, которое не является агрегатом, должно появляться в предложении GROUP BY.

Кроме того, действительно ли TRANSACTION_ID принадлежит таблице измерений?

...