2009-10-30 102 views
1

我有一个涉及2个逻辑表的多对多表关系。涉及家庭关系的棘手的SQL查询问题

是连接到一个关系表上primaryID是加入到关系表上ReciprocalID

这样做的目的是为了显示数据库中的家庭关系记录表的 二审

记录表。每个主记录表在关系表中有一行或多行,显示此人在数据库中具有的其他家庭关系。

我的任务是设法建立一个联系人列表,其中包括显示每个参加这所学校的孩子的名字以及他们的父母和联系信息。

我已经到了能够向每位父母下方展示孩子的地步,但现在我必须找到一种方法将这些孩子合并在一起。

因为我无法控制这个数据库(它的Education Edge 7)的设计,所以我制作了一个单独的数据库来存放我的报告的查询和视图。我正在从事这项工作的学校只能访问CR 8.5。

现在我有我的顶级组在CR作为recordstable的姓氏,我的第二组是在recordstable的全名。我有一个子报表,可以记录所有的孩子记录。

我在我的主视图(上面描述的)中将'女儿'和'儿子'转换为子女,'母亲'或'父亲'转换为父母时使用了一种情况。

希望这没有太多漫游。如果您需要更多信息,请询问。

SELECT  dbo.vwEA7RelationshipsTableView.PRIMARYID, 
      dbo.vwEA7RecordsTableView.LASTNAME AS PRIMARYLASTNAME, 
      dbo.vwEA7RecordsTableView.FIRSTNAME AS PRIMARYFIRSTNAME, 
      dbo.vwEA7RecordsTableView.NAMEFORDISPLAY AS PRIMARYNAME, 
      CASE dbo.vwEA7RelationshipsTableView.PRIMARYDESC 
       WHEN 'Father' THEN 'Parent' 
       WHEN 'Mother' THEN 'Parent' 
       WHEN 'Son' THEN 'Child' 
       WHEN'Daughter' THEN 'Child' 
       ELSE dbo.vwEA7RelationshipsTableView.PRIMARYDESC 
       END AS PRIMARYDESC, 
      dbo.vwEA7RelationshipsTableView.RELATIONID, 
      vwEA7RecordsTableView_1.LASTNAME AS RELATIONLASTNAME, 
      vwEA7RecordsTableView_1.NAMEFORDISPLAY AS RELATIONNAME, 
      dbo.vwEA7RelationshipsTableView.RELATIONDESC 
FROM   dbo.vwEA7RelationshipsTableView INNER JOIN 
         dbo.vwEA7RecordsTableView ON 
         dbo.vwEA7RelationshipsTableView.PRIMARYID = dbo.vwEA7RecordsTableView.ID INNER JOIN 
         dbo.vwEA7RecordsTableView AS vwEA7RecordsTableView_1 ON 
         dbo.vwEA7RelationshipsTableView.RELATIONID = vwEA7RecordsTableView_1.ID 

TableViews实际上只是从主数据库中重新创建主表。

+0

有什么问题吗? – dotjoe 2009-10-30 18:15:08

+0

“我已经到了能够向每位家长展示孩子的地步,但现在我必须找到一种方法将这些孩子融合在一起” - 你能描述一下你的意思吗? – MartW 2009-10-30 18:55:09

+0

关系表中的每个记录都有几种可用的描述。每个记录在Relationtable中都有一个或多个记录,用于说明主ID与关系ID的关系。所以: 1 Jane Doe的母亲23李四JR儿子 1 Jane Doe的母亲24 Jane Doe的JR女儿 1李四老婆25李四丈夫 25李四丈夫1李四老婆 25李四父亲23李四JR儿子 那就是原始数据。我把搞得爸爸妈妈=母体和子子=儿童 – ecathell 2009-10-30 19:18:03

回答

0

我已经解决了这个问题。我的sql代码很好,这是格式化我的内部参数Crystal和一些创意分组的问题。

+0

不要忘记,如果你想出来,你可以把它标记为正确的答案。 :) – Dusty 2009-11-02 15:24:17

+0

是的,我那天试过,但它告诉我,我不得不等待2天...现在就做... – ecathell 2009-11-02 17:35:28