1

我不确定是否已经有人问过这个问题——我环顾四周,但找不到任何东西。

我的最终结果是从我的几个 SQL 数据库表中获取数据到一个逗号分隔的平面文件中。通常这不是问题,但由于他们的多对一关系以及我被迫将其放入的格式,事实证明是这样。

第一个我有一个表,报告表,其中包含报告的所有基本信息。例如

CREATE TABLE tblReportExample
(
    ReportID int,
    ReportMonth smalldatetime,
    ReportDetails varchar(500)
)

第二,我有另一个表格,其中包含每个报告的案例。

CREATE TABLE tblReportCasesExample
(
    ReportID int,
    ReportCase varchar(50)
)

第三,我有一个平面文件定义,内容如下:

ReportID、ReportMonth、ReportDetails、ReportCase1、ReportCase2、ReportCase3

我需要做的是将 tblReportCasesExample 中的前三个案例添加为报告,以某种方式将其与 tblReportExample 中的数据连接起来,并将其作为 ReportCase1、2 和 3 添加到平面文件中。

我整天都在看这个东西,只是想不通。

有任何想法吗?

4

5 回答 5

1

建议更新您的问题:不仅仅是“平面文件”,还有“CSV 文件”。据推测,CSV 文件是对另一个系统的导出,或者只是对喜欢在 Excel 中查看内容的人的导出:-)

另一位老前辈的评论(意思是,做过很多文件传输系统集成工作的人):并非所有世界都是 SQL 数据库。特别是如果您不需要“ACID”来执行任务(除了围绕初始提取的事务)。

将两个表(的相关部分)转储到一对 CSV 文件中。然后“按程序”组装最终的 CSV 文件。实用提取和报告语言(又名“perl”)是处理这类事情的好工具,但还有其他工具。

将“tblReportCasesExample”数据读入某种索引数据结构。

遍历“tblReportExample”数据:

  • 选择您“最喜欢的” tblReportCasesExample 条目

  • 转储 tblReportExample 字段,然后是来自相关 tblReportCasesExample 行/行的选择(键)值。

如果数据中有任何特殊字符,请查找 CSV 处理库。否则,只需使用“split”(perl 和 java 都有类似的东西,我怀疑 .NET 库也是如此)。

需要更多细节/护理吗?

于 2009-08-27T20:20:16.280 回答
0

案例表中的 ReportID 与报告表中的 ReportID 相同。场景2是我的问题。我可以通过左外连接获得一个案例,但找不到一种创造性的方式来获得其他两个:

SELECT re.ReportID, re.ReportMonth, re.ReportDeails, rce.ReportCase 
FROM tblReportExample re 
LEFT OUTTER JOIN tblReportCasesExample rce 
ON(re.ReportID = rce.ReportID)
于 2009-08-26T13:58:06.570 回答
0

You just need to add more cases to the cases table, and add an id to distinguish them:

CREATE TABLE tblReportCasesExample
(
    CaseID int,
    ReportID int,
    ReportCase varchar(50)
)

What causes my confusion is why you need the text file?

于 2009-08-26T15:20:05.427 回答
0

我还没有在 MS SQL Server 上测试过这个(我从你对smalldatetime数据类型的使用中推断出来),但是我看到了一些关于你可以用FOR XML PATH.

SELECT r.*,
  (SELECT TOP 3 c.ReportCase + ',' AS [text()]
   FROM tblReportCasesExample c
   WHERE c.ReportId = r.ReportId
   FOR XML PATH('')
  ) AS ReportCaseList
FROM tblReportExample r;

结果应该有 tblReportExample 的列,加上前三个报告案例的逗号分隔字符串。然后也许在 CSV 文件中,您不会知道某些逗号是该字符串的一部分,而不是分隔列。:-)

于 2009-09-23T02:02:36.090 回答
0

请确保您在此处使用正确的 ID。我对你的追求感到困惑。

据我所知,您的问题是以下两个之一:

1.单个报表指向多个case case可以分配给多个report

这需要多对多连接。

2. 单个报表指向多个案例 单个案例可以分配给单个报表

这是一对多

在第二点,我看不出是什么导致了你的麻烦,请详细说明。

于 2009-08-26T00:31:07.627 回答