根据列值的更改将空行添加到MySQL查询结果中

时间:2015-06-03 20:04:13

标签: mysql sql formatting

如果我有一个典型的MySQL查询,例如:

SELECT CommentNo, CreatedDate, CreatedTime, Text FROM Comment

结果将显示在一个简单的表格中。但是有可能让MySQL格式化输出,以便根据列中的更改将空行插入到结果中吗?

因此,如果上面的查询默认返回以下内容:

 CommentNo CreatedDate CreatedTime Text
 1         2012-08-02  15:33:27    This.
 2         2012-08-02  15:34:40    That.
 3         2013-06-30  19:45:48    Something else.
 4         2013-06-30  21:26:01    Nothing.
 5         2013-06-30  21:26:43    Was.
 6         2013-07-01  13:40:32    Hello.
 7         2013-07-01  14:08:25    Goodbye.

是否可以在更改CreatedDate的列值时插入空白行,因此我得到:

 CommentNo CreatedDate CreatedTime Text
 1         2012-08-02  15:33:27    This.
 2         2012-08-02  15:34:40    That.

 3         2013-06-30  19:45:48    Something else.
 4         2013-06-30  21:26:01    Nothing.
 5         2013-06-30  21:26:43    Was.

 6         2013-07-01  13:40:32    Hello.
 7         2013-07-01  14:08:25    Goodbye.  

以上不是数据如何存储在Comment表中,而是格式化查询输出的问题。

或者在Java中使用BufferedWriter会更好吗?

2 个答案:

答案 0 :(得分:1)

首先,我要说这种格式肯定应该在应用程序层完成而不是查询。

那就是说,这似乎是一个有趣的练习,并不是那么难:

select CommentNo, CreatedDate, CreatedTime, Text
from (select c.*, CreatedDate as key1, 0 as ordering
      from comment c
      union all
      select c2.*, c.CreatedDate, 1
      from (select distinct CreatedDate from comment c) c left join
           comment c2
           on 1 = 0
     ) c
order by key1, ordering, id;

请注意在第二个子查询中使用left join来引入所有列,因此它与第一个子查询中的select *匹配。但是,删除最后两列仍然需要列出所有这些列。

答案 1 :(得分:-1)

我已经调整了在enter link description here找到的代码,它可以很容易地扩展为在解析数据时包含一行来编写.csv文件。

// Iinitialise FileWriter object.
        fileWriter = new FileWriter(fileName);

        // Iinitialise CSVPrinter object/ t.
        csvFilePrinter = new CSVPrinter(fileWriter, csvFileFormat);

        // Create .csv file header.
        csvFilePrinter.printRecord(FILE_HEADER);

        // Write a new student object list to the .csv file.
        for (Student student : students) {
            ArrayList studentDataRecord = new ArrayList();
            studentDataRecord.add(String.valueOf(student.getId()));
            studentDataRecord.add(student.getFirstName());
            studentDataRecord.add(student.getLastName());
            studentDataRecord.add(student.getGender());
            studentDataRecord.add(String.valueOf(student.getAge()));
            csvFilePrinter.printRecord(studentDataRecord);
            csvFilePrinter.println();
        }

虽然我还没有添加代码来确定所需列值的变化,但这很简单。