2016-06-14 242 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语句中指定了“order by”子句(即,这不是excel,除非您告诉它们这些行确实按特定顺序),才会定义表中行的顺序。您可能想创建一个查询或视图来代替。 –

+0

你使用的是什么dbms? – 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 

您可以输入: 打破段 您的查询之前,并得到这样的:如果你想添加

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 *加上其他的东西,你需要在这个问题说了。

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