Header 将 Db2 select 查询结果导出到 CSV 时未出现
Header not coming while exporting Db2 select query results to CSV
我正在尝试执行以下查询以将结果导出到 CSV。我可以将数据导出到 CSV,但文件中缺少 headers。无论如何,我们可以实现这一目标吗?我以“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
我现在已将更新后的查询包含在 post 中。
Db2-LUW export
命令无法将列 headers 添加到输出文件。它只导出 SELECT 语句中的任何内容。
因此,当您想在 CSV 文件中包含 column-headers 时,您有不同的选择。
一种方法(当没有 order by
时)是将 SELECT 语句变成两个查询的 UNION,第一个查询 returns 一行是列名列表,然后将其与您的实际查询结合起来。这意味着您必须 hand-craft 第一个查询的 column-names 才能匹配真正的第二个查询。例如,在您的情况下,它可能看起来像:
SELECT 'row_num', 'detail_type_cd', ....
from sysibm.sysdummy1
UNION
SELECT t1.ROW_NUM, T5.DETAIL_TYPE_CD, ...
(您必须手动制作 column-names ,将它们放入 single-quotes 等。但是如果您希望 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 的另一种(可能更简单)方法是不使用导出命令,而是创建一个外部 table,它允许您在 CSV 文件的许多其他选项中指定一个选项 includeheader on
。您可以在本网站搜索 examples, and reference the documentation.
我正在尝试执行以下查询以将结果导出到 CSV。我可以将数据导出到 CSV,但文件中缺少 headers。无论如何,我们可以实现这一目标吗?我以“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
我现在已将更新后的查询包含在 post 中。
Db2-LUW export
命令无法将列 headers 添加到输出文件。它只导出 SELECT 语句中的任何内容。
因此,当您想在 CSV 文件中包含 column-headers 时,您有不同的选择。
一种方法(当没有 order by
时)是将 SELECT 语句变成两个查询的 UNION,第一个查询 returns 一行是列名列表,然后将其与您的实际查询结合起来。这意味着您必须 hand-craft 第一个查询的 column-names 才能匹配真正的第二个查询。例如,在您的情况下,它可能看起来像:
SELECT 'row_num', 'detail_type_cd', ....
from sysibm.sysdummy1
UNION
SELECT t1.ROW_NUM, T5.DETAIL_TYPE_CD, ...
(您必须手动制作 column-names ,将它们放入 single-quotes 等。但是如果您希望 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 的另一种(可能更简单)方法是不使用导出命令,而是创建一个外部 table,它允许您在 CSV 文件的许多其他选项中指定一个选项 includeheader on
。您可以在本网站搜索 examples, and reference the documentation.