【问题标题】:Header not coming while exporting Db2 select query results to CSV将 Db2 选择查询结果导出到 CSV 时没有出现标题
【发布时间】:2021-06-17 08:10:02
【问题描述】:

我正在尝试执行以下查询以将结果导出到 CSV。我能够将数据导出为 CSV,但文件中缺少标题。无论如何,我们可以实现这一目标吗?我以“db2 -tvmf D:\Db.sql”的形式执行文件

connect to ****** user ***** using ******
export to "D:\Vikas.csv" OF DEL MESSAGES
select  
'ROW_NUM',
'DETAIL_TYPE_CD',
'ADMIN_FEES_TICKET',
'ADMINISTRATIVE_FEES',
'BASE_RENT',
'CITATIONS',
'COLLECTION_REPO_FEES',
'DESC',
'EFFECTIVE_DATE',
'LATE_CHARGE',
'MISC_FEE',
'STATUS_CD',
'ROW_ID',
'ROW_ID',
'BUILD',
'REVERSE_FLG',
'NSF_FLG',
'PR_CON_ID',
'PROC_DATE',
'PROPERTY_TAX',
'REGISTRATION_FEES',
'REPAIR_FEES',
'SALES_TAX',
'TERMINATION_FEES',
'TOTAL_TRANS',
'TRANSACTION_TYPE'
from sysibm.sysdummy1

UNION ALL (select 
T1.ROW_NUM,
T5.DETAIL_TYPE_CD,
T1.ADMIN_FEES_TICKET,
T1.ADMINISTRATIVE_FEES,
T1.BASE_RENT,
T1.CITATIONS,
T1.COLLECTION_REPO_FEES,
T1.DESC,
T1.EFFECTIVE_DATE,
T1.LATE_CHARGE,
T1.MISC_FEE,
T2.STATUS_CD,
T4.ROW_ID,
T3.ROW_ID,
T2.BUILD,
T1.REVERSE_FLG,
T1.NSF_FLG,
T2.PR_CON_ID,
T1.PROC_DATE,
T1.PROPERTY_TAX,
T1.REGISTRATION_FEES,
T1.REPAIR_FEES,
T1.SALES_TAX,
T1.TERMINATION_FEES,
T1.TOTAL_TRANS,
T1.TRANSACTION_TYPE

FROM
SIEBEL.LSE_INPHIST_VIEW T1
LEFT OUTER JOIN SIEBEL.S_ASSET T2 ON T1.ACCOUNT_NUM = T2.ASSET_NUM
LEFT OUTER JOIN SIEBEL.S_ASSET_CON T3 ON T2.ROW_ID = T3.ASSET_ID AND
T3.RELATION_TYPE_CD = 'Obligor'
LEFT OUTER JOIN SIEBEL.S_ASSETCON_ADDR T4 ON T3.ROW_ID = 
T4.ASSET_CON_ID AND T4.USE_TYPE_CD = 'Bill To'
LEFT OUTER JOIN SIEBEL.S_PROD_INT T5 ON T2.PROD_ID = T5.ROW_ID
WHERE
(T1.ACNT_ID = '01003501435'))
ORDER BY
T1.ACNT_ID DESC,T1.PROC_DATE DESC WITH UR

我现在在帖子中包含了更新后的查询。

【问题讨论】:

标签: db2


【解决方案1】:

Db2-LUW export 命令无法将列标题添加到输出文件。它只导出 SELECT 语句中的任何内容。

因此,当您想在 CSV 文件中包含列标题时,您有不同的选择。

一种方法(当没有 order by 时)是将 SELECT 语句变成两个查询的 UNION,第一个查询返回一行,即列名列表,然后将其与您的真实询问。这意味着您必须手工制作第一个查询的列名以匹配真正的第二个查询。例如,在您的情况下,它可能看起来像:

SELECT 'row_num', 'detail_type_cd', ....
from sysibm.sysdummy1
UNION
SELECT t1.ROW_NUM, T5.DETAIL_TYPE_CD, ...

(您必须手动创建列名,将它们放在单引号中等。但如果您希望 Db2 计算出列名,您可以使用像 here 这样的技术。

如果您有order by,您可以运行两个单独的export 命令(即没有联合)输出到两个单独的输出文件,然后使用操作系统函数连接输出文件,如下所示:

export to headers.csv select 'colname1','colname2'...from sysibm.sysdummy1;

export to data.csv select ... 

-- for MS-windows
!copy /a headers.csv + data.csv   data_with_headers.csv ;

另一种(可能更简单)的方法是使用 v11.5(和更高)版本的 Db2-LUW,不使用 export 命令,而是创建一个外部表,它允许您指定一个选项 @ 987654330@ 以及 CSV 文件的许多其他选项。您可以在本站搜索examples,并引用documentation。

【讨论】:

  • 我已经进行了上述更改,并在工具中单独执行了查询,并且能够获得所需的格式。当我合并它们时,我得到以下错误。“SQL0197N ORDER BY 子句中不允许有限定的列名。SQLSTATE=42877”
猜你喜欢
  • 1970-01-01
  • 2018-02-04
  • 1970-01-01
  • 1970-01-01
  • 2015-06-29
  • 1970-01-01
  • 2015-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多