Строка SQL в столбцы без функции Pivot

#sql #row #line

#sql #строка #линия

Вопрос:

Я борюсь с этой простой на вид проблемой, когда хочу преобразовать строки для одного идентификатора в столбцы. Таким образом, в столбце будет X , если у этого идентификатора есть строка с этим значением, но без использования PIVOT, поскольку я не на 11g, так что это должен быть какой-то древний способ 🙂 Если это возможно, как я считаю, я просто не в состоянии взломать его самостоятельно. Спасибо за помощь всем, кто любит сложные задачи и думает, что это легко, как кажется, но это не так :/

Итак, если у меня есть

 ID Access DB1 DB2 DC1
1  DB1    x 0 0
1  DB2    0 0 0
1  DC1    0 0 x
2  DB1    x 0 0
2  DB2    0 x 0
3  DC1    0 0 x
 

Таким образом, результатом того, что я ищу, будет всего 3 строки

 ID DB1 DB2 DC1
1  x   0  x
2  x   x  0
3  0   0  x
 

https://data.stackexchange.com/stackoverflow/query/edit/1338592

Мне интересно, не было бы у меня этих 3 других столбцов, а были бы только первые два. Каким будет способ преобразования строк в столбцы? Во-первых, если бы было точное число, то в нашем случае 3 столбца DB1, DB2 и DC1, а что, если число не будет известно, поэтому все отдельные строки будут создавать новые столбцы. Кто-нибудь за вызов.

Вход 1

 ID Access
1 DB1 
1 DB2 
1 DC1 
2 DB1 
2 DB2 
3 DC1 
 

Результаты 1

 ID DB1 DB2 DC1 
1 DB1 DB2 DC1 
2 DB1 DB2 
3         DC1
 

Ответ №1:

Похоже, вы хотите max() :

 select id, max(db1), max(db2), max(db3)
from t
group by id;
 

Комментарии:

1. Спасибо, да, это было именно то, что мне было нужно. Знание — это сила 😉

2. Мне интересно, что было бы, если бы у меня не было этих 3 других столбцов, а были только первые два. Каким будет способ преобразования строк в столбцы. Во-первых, если будет точное число, то в нашем случае 3 столбца DB1, DB2 и DC1, и что, если число не будет известно, поэтому вся отдельная строка создаст новый столбец. Кто-нибудь за вызов. Ввод 1 Идентификатор доступа 1 DB1 1 DB2 1 DC1 2 DB1 2 DB2 3 DC1 Результаты 1 Идентификатор DB1 DB2 DC1 1 DB1 DB2 DC1 2 DB1 DB2 3 DC1

3. @PeterKepo . , , Вы должны задавать новые вопросы как новый вопрос , а не комментарий. Однако, если вы не знаете, сколько столбцов в результирующем наборе, вам нужно использовать динамический SQL — сконструировать инструкцию SQL в виде строки в приложении, а затем выполнить ее.