СВОДНАЯ функция в SQL SNOWFLAKE

#sql #snowflake-cloud-data-platform

Вопрос:

У меня есть такой запрос:

 SELECT *  FROM TABLE_A  PIVOT(MIN(DATETIME) FOR TATUS IN ('claim', 'bought', 'returned'))   AS P (NUMBER_ID, COUNTRY)  

У меня есть 10 столбцов в TABLE_A, когда я добавляю ПЕРВИЧНЫЙ КЛЮЧ после P, так что: P (NUMBER_ID, СТРАНА) — которые не являются первыми двумя столбцами, найденными в таблице, это портит весь порядок таблицы и помещает их в качестве первых двух столбцов со значениями разных столбцов.

Кто-нибудь знает, как решить эту проблему? Или как сделать так, чтобы столбцы «претензия», «куплено» и «возврат» не отображались с котировками без необходимости добавлять их в PK?

Ответ №1:

Позвольте мне посмотреть, смогу ли я воспроизвести вашу проблему.

Промежуточные данные:

 create or replace temp table source as  select $1 id, $2 status, $3::date date, $4 rand, $5 country from values(1, 'claimed', '2020-01-01'::date, 1.1, 'us'), (1, 'bought', '2020-01-02', 1.2, 'us'), (1, 'reverted', '2020-01-03', 1.3, 'us') , (2, 'claimed', '2020-01-01', 1.4, 'cl'), (2, 'bought', '2020-01-02', 1.5, 'cl'), (2, 'reverted', '2020-01-03', 1.6, 'cl'); ;  

Поворотный:

 SELECT * FROM source PIVOT(MIN(date) FOR status IN ('claimed', 'bought', 'reverted'))  AS P(id, country)  

введите описание изображения здесь

Это действительно выглядит не очень хорошо.

Чтобы исправить это, выполните дополнительный выбор, который выбирает только столбцы, которые будут использоваться в сводке:

 SELECT * FROM (select id, country, status, date from source) PIVOT(MIN(date) FOR status IN ('claimed', 'bought', 'reverted'))  AS P(id, country, claimed, bought, reverted)  

введите описание изображения здесь

Пожалуйста, покажите нам ваши примерные данные и желаемые результаты для получения дополнительной помощи.