Oracle SQL Transpose для неагрегированных значений

У меня есть стол ...

SELECT * FROM ALLERGIES;

Результаты в:

Name | Alergy | Alergy Desc | Value John | Gluten | Gluten Products | Yes John | Dairy | Milk, Cheese etc | No Mary | Peanuts | Any kind peanuts | Yes Dave | Gluten | Gluten Products | No Dave | Peanuts | Any kind peanuts | Yes

И я хочу, чтобы это выглядело вот так ...

Name | Dairy | Gluten | Peanuts | ... Dave | NULL | No | Yes | John | No | Yes | NULL | Mary | NULL | NULL | Yes | . . .

Другими словами, ведите отдельный список имен в крайнем левом столбце (A-Z) с именами для заголовков столбцов L-R, A-Z.

Я не использую агрегатные функции, поэтому, к сожалению, не могу заставить его работать с PIVOT. Существует несколько имен и несколько предупреждений, поэтому ручная подгонка всех значений для удовлетворения IN (x,y,z) метода PIVOT здесь не подходит, даже если бы я мог создать некоторую форму агрегата.

Любые идеи?

Примечание: Я отбросил описание аллергии в запросе на удаление уровня сложности, но в идеале это будет «Alergy - Alergy Desc» для каждого экземпляра заголовка столбца.

Редактировать: Обновлен заголовок, чтобы явно указать неагрегированные значения, а не решение без агрегирования.

Вам необходимо получить список аллергенов (и описания) из этой таблицы во время выполнения; вы не можете жестко запрограммировать их в свой сводный запрос? Если вы не знаете количество столбцов результатов до начала, вам придется использовать динамический SQL.

Alex Poole 15.08.2018 15:04

Чтобы заставить PIVOT работать, используйте агрегатную функцию, даже если вам это не нужно; min(value) обычно используется таким образом. Не бойтесь: если есть только одно значение, то min(value) будет равно этому значению, так что вы получите то, что вам нужно. Даже если бы вы избегали оператора PIVOT, вам все равно потребуется агрегирование (например, min(value)) для выполнения поворота «старым способом», с так называемым условным агрегированием.

mathguy 15.08.2018 15:14

Другая проблема - это большое количество аллергий ... тогда вам лучше вообще не делать поворота в SQL, а вместо этого использовать возможности поворота вашего приложения для создания отчетов (вы используете его, верно?)

mathguy 15.08.2018 15:15

Спасибо за ответы. @mathguy, я использовал агрегат, как вы предложили, но большое количество динамических значений, которые будут использоваться в качестве столбцов, затрудняет использование MAX (value) FOR X IN (val1, val2), поскольку я не могу жестко закодировать эти значения. И, да, я использую приложение для создания отчетов, но я хочу, чтобы оно выводило желаемые результаты из SQL.

AJQShake 15.08.2018 17:08

@AJQShake - ОК, но тогда ваша проблема не в «транспонировании без совокупности» - проблема не в агрегации. Вам нужно будет использовать динамический SQL; это обычно считается слабым подходом и требует глубоких знаний PL / SQL. Готовы ли вы ответить на этот вызов? Почему бы не сделать это из приложения для отчетов?

mathguy 15.08.2018 17:12

@mathguy - я не хочу делать это в приложении для создания отчетов по ряду сложных причин, но я, по сути, хочу, чтобы готовый запрос был помещен в несколько различных ресурсов / настроек без какой-либо конфигурации. Спасибо за вашу помощь. Я изучу динамический SQL. Администратор может пометить это как дубликат stackoverflow.com/questions/46030522/…, поскольку я неправильно назвал его.

AJQShake 15.08.2018 17:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
48
0

Другие вопросы по теме