2015-05-25 3 views
0

У меня есть таблица с данными клиента, посылка, цикл и номера телефонов. Если у клиента есть более одного номера телефона, он должен поступать в том же ряду, но в другом столбце.Как использовать точку поворота на столе

В базе данных:

Customer Premise Phone 
------------------------------ 
C1   P1   Ph1 
C1   P1   Ph2 
C1   P1   Ph3 
C2   P2   Ph1 

Как я хочу:

Customer Premise Phone Phone1 Phone3 
----------------------------------------------- 
C1   P1   Ph1  Ph2  Ph3 
C2   P2   Ph1  {null} {null} 

Как написать сводную таблицу для этого? Пожалуйста помоги.

+0

Вы пытаетесь сделать число столбцов, возвращаемых динамическими? Итак, если добавлен другой номер телефона, добавляется еще один столбец? Если это так, вам нужно будет динамически собрать инструкцию SQL. Для этого потребуется отдельный запрос для подсчета максимального количества телефонных номеров, которые человек имеет, что не будет ужасно эффективным. –

ответ

1

Этот запрос дает ожидаемый результат:

select * from (
    select customer, premise, phone, 
    row_number() over (partition by customer order by premise, phone) rn 
    from customers) 
    pivot (max(phone) phone for rn in (1, 2, 3)) 

Выход:

CUSTOMER PREMISE 1_PHONE 2_PHONE 3_PHONE 
-------- ------- ------- ------- ------- 
C1  P1  Ph1  Ph2  Ph3 
C2  P2  Ph1 

SQLFiddle

В случае, если вы хотите динамический количество телефонов, пожалуйста, прочитайте this article.

Смежные вопросы