Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Join 平面文件的多对一连接帮助_Join_One To Many_Flat File_Flat - Fatal编程技术网

Join 平面文件的多对一连接帮助

Join 平面文件的多对一连接帮助,join,one-to-many,flat-file,flat,Join,One To Many,Flat File,Flat,我不确定是否已经有人问过这个问题——我四处看了好一会儿,但什么也没找到 我的最终结果是将多个SQL数据库表中的数据获取到一个逗号分隔的平面文件中。通常情况下,这不会是一个问题,但由于他们的多对一关系以及我被迫使用的格式,事实证明这是一个问题 首先,我有一个表,报告表,它包含了报告的所有基本信息。比如说 CREATE TABLE tblReportExample ( ReportID int, ReportMonth smalldatetime, ReportDetails

我不确定是否已经有人问过这个问题——我四处看了好一会儿,但什么也没找到

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

首先,我有一个表,报告表,它包含了报告的所有基本信息。比如说

CREATE TABLE tblReportExample
(
    ReportID int,
    ReportMonth smalldatetime,
    ReportDetails varchar(500)
)
第二,我有另外一张表格,上面有每个报告的案例

CREATE TABLE tblReportCasesExample
(
    ReportID int,
    ReportCase varchar(50)
)
第三,我有一个平面文件定义,包含以下内容:

ReportID, 报告月, 报告详情, 报告案例1, 报告案例2, 报告案例3

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

我整天都在看这件事,就是想不出来


有什么想法吗?

请确保您在此处使用了正确的ID。我不明白你在追求什么

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

一,。 单个报告指向多个案例 案例可以分配给多个报告

这需要多对多的连接

二,。 单个报告指向多个案例 可以将单个案例分配给单个报告

这是一对多


在第二点中,我看不出是什么原因造成了问题,请详细说明。

请确保您在这里使用了正确的ID。我不明白你在追求什么

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

一,。 单个报告指向多个案例 案例可以分配给多个报告

这需要多对多的连接

二,。 单个报告指向多个案例 可以将单个案例分配给单个报告

这是一对多


在第二点中,我看不出是什么导致了问题,请详细说明。

案例表中的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)

案例表中的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)

您只需将更多案例添加到案例表中,并添加一个id来区分它们:

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

引起我困惑的是您为什么需要文本文件?

您只需将更多案例添加到案例表中,并添加一个id来区分它们:

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

引起我困惑的是您为什么需要文本文件?

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

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

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

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

遍历“tblReportExample”数据:

  • 选择您最喜欢的tblReportCasesExample条目

  • 转储tblReportExample字段,然后从相关tblReportCasesExample行/行中选择(键)值

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


需要更多细节/注意吗?

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

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

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

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

遍历“tblReportExample”数据:

  • 选择您最喜欢的tblReportCasesExample条目

  • 转储tblReportExample字段,然后从相关tblReportCasesExample行/行中选择(键)值

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


需要更多详细信息/注意吗?

我还没有在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文件中,您可能不知道某些逗号是该字符串的一部分,而不是分隔列。:-)

我还没有在MS SQL Server上测试过这一点(我从您使用的
smalldatetime
数据类型中推断出这一点),但我看到了一些关于这一点的文章