2016-06-14 4 views
1

Я смотрю последние 12 месяцев. Каждый месяц в наборе данных 5 раз, один раз для каждого сегмента. Каждая строка, (Сегмент, год) также имеет «вызовы». Таким образом, каждая строка выглядитКак вставить пустую строку в SQL в указанных местах?

Segment YearMonth Calls 
1   201505  20 

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

Segment YearMonth Calls 
1   201505  20 
      201506  20 
      201507  20 
      201508  20 
      201509  20 
2   201505  20 
... 

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

+0

Это ужасно. Не заставляйте записи зависеть от информации от другой такой, как это –

+0

На самом деле не имеет смысла вставлять строку в определенную позицию. Порядок строк в таблице определяется только в том случае, если вы указываете предложение «упорядочить по» в своем предложении select (т. Е. Это не превосходит, строки не находятся в определенном порядке, если вы не скажете им). Вероятно, вы захотите создать запрос или представление, чтобы сделать это вместо этого. –

+0

Что вы используете? – cableload

ответ

1

SQL вообще не делает форматирования, но Oracle SQL * Plus делает. Если вы работаете с SQL * Plus и ваш запрос будет возвращать:

SEGMENT  YEARMONTH  CALLS 
1   201505  20 
1   201506  20 
1   201507  20 
1   201508  20 
1   201509  20 
2   201505  20 
2   201506  20 

Вы можете ввести: BREAK ON СЕГМЕНТУ до вашего запроса и получить что-то вроде:

SEGMENT  YEARMONTH CALLS 
1   201505  20 
      201506  20 
      201507  20 
      201508  20 
      201509  20 
2   201505  20 
      201506  20 

Если вы хотите добавить пробел после каждого сегмента, вы можете использовать:

BREAK ON SEGMENT SKIP 1 

Если вы используете что-то другое, чем SQL * Plus, вы должны сказать в этом вопросе.

1

Если вы желаете, чтобы вернуть пустую строку перед каждым сегментом, некоторые псевдо SQL может быть:

SELECT * 
FROM 
( 
    SELECT segment 
     ,yearmonth 
     ,calls 
    FROM table 
    UNION 
    SELECT segment 
     ,[yearmonth] = null 
     ,[calls]  = null 
    FROM 
    (
     SELECT distinct segment 
     FROM table 
    ) seg    
) base 
ORDER BY segment 
     ,yearmonth 
Смежные вопросы