MySQL:动态导出标题位于顶部的 CSV 文件

标签 mysql dynamic header export-to-csv

我想从 mySQL 动态导出带有标题的 CSV 文件。我尝试了shadow0359的答案: MySQL: Dynamically export CSV file with headers ,但他的解决方案,我相信将标题导出到记录的底部而不是顶部。有谁知道如何从 mySQL 动态导出标题位于顶部的 CSV 文件?

我的代码(要创建的脚本):

存储过程

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `p_test`(in_Accountid 
varchar(30))
BEGIN

SET @default_group_concat_max_len = (SELECT @@group_concat_max_len);
SET SESSION group_concat_max_len = 1000000;
SET @FilePath:='C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/';
SET @FileName:=CONCAT(in_AccountID,'_',DATE_FORMAT(NOW(),'%Y-%m- 
%d'),'.xls');
SET @FullFilePath:=CONCAT(@FilePath,@FileName);
SET @TableName:='temp_transactionslines';
SET @TableSchema:='melhor_metade_2016';

SET @SQL = ( select CONCAT('SELECT  
                        TransactionID
                        ,RecordID
                        ,AccountID
                        ,AccountDescription
                        ,SourceDocumentID
                        ,SystemEntryDate
                        ,Description
                        ,DebitAmount
                        ,CreditAmount
                        ,Period
                        ,TransactionDate
                        ,CustomerTaxID
                        ,CustomerID 
                        INTO OUTFILE \''
                        , @FullFilePath, '\'
                        FROM (SELECT '
                            ,group_concat(CONCAT("'", COLUMN_NAME,"'"))
                            ,' UNION ALL SELECT * FROM 
temp_transactionslines  order by TransactionID ASC) as tmp')

        from INFORMATION_SCHEMA.COLUMNS 
        WHERE TABLE_NAME = @TableName
        AND TABLE_SCHEMA = @TableSchema
        order BY ORDINAL_POSITION );

SET SESSION group_concat_max_len = @default_group_concat_max_len;

PREPARE dynamic_statement FROM @SQL;
EXECUTE dynamic_statement;
DEALLOCATE PREPARE dynamic_statement;

END$$
DELIMITER ;

表格

CREATE TABLE `temp_transactionslines` (
`TransactionID` varchar(70) NOT NULL,
`RecordID` varchar(30) NOT NULL,
`AccountID` varchar(30) DEFAULT NULL,
`AccountDescription` varchar(100) DEFAULT NULL,
`SourceDocumentID` varchar(60) DEFAULT NULL,
`SystemEntryDate` varchar(19) DEFAULT NULL,
`Description` varchar(200) DEFAULT NULL,
`DebitAmount` float(13,2) DEFAULT NULL,
`CreditAmount` float(13,2) DEFAULT NULL,
`Period` int(2) DEFAULT NULL,
`TransactionDate` varchar(19) DEFAULT NULL,
`CustomerTaxID` varchar(20) DEFAULT NULL,
`CustomerID` varchar(30) DEFAULT NULL,
`SupplierID` varchar(30) DEFAULT NULL,
 KEY `i_accountID` (`AccountID`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;

数据

INSERT INTO `melhor_metade_2016`.`temp_transactionslines`
(`TransactionID`,
`RecordID`,
`AccountID`,
`AccountDescription`,
`SourceDocumentID`,
`SystemEntryDate`,
`Description`,
`DebitAmount`,
`CreditAmount`,
`Period`,
`TransactionDate`,
`CustomerTaxID`,
`CustomerID`,
`SupplierID`)
VALUES
('a','b',3,4,5,2, 1, 1,null,3,1,2,3,4);

最佳答案

您生成以下查询:

SELECT 'TransactionID'
      ,'RecordID'
      ,'AccountID'
      -- more column names
UNION ALL
SELECT * FROM temp_transactionslines
order by TransactionID ASC

ORDER BY 子句适用于完整的 UNION 集。如果只想对第二个查询结果进行排序,则应将查询括在括号中:

SELECT 'TransactionID'
      ,'RecordID'
      ,'AccountID'
      -- more column names
UNION ALL
(SELECT * FROM temp_transactionslines  order by TransactionID ASC)

演示:https://www.db-fiddle.com/f/fSXBH527fxg9hXy1JYGHyQ/0

关于MySQL:动态导出标题位于顶部的 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54971971/

相关文章:

mysql - 如何获得任意连续范围内的最大值

mysql - 您将如何设计这个数据库?个人和团体所有权

javascript - 添加转到使用 javascript 制作的动态表中的另一个 HTML 页面的功能

MySQL - 相当于 SQL "Master"数据库仍然存在吗?

php - 触发器不起作用 - 在插入之前更改表以添加新列

vba - 多个类似的动态创建的命令按钮的操作

javascript - JavaScript 中的精确动态 SVG 用于行为实验

javascript - 固定 header jQuery Mobile

python - 使用Python中的文件中的位数组读取带有 header 的二进制文件

c - C 考试评分计划