C# DataSet Designer - AccesDB - 将两行合并为一行

我在 SQL 查询方面需要您的帮助,我正在尝试在 C# Dataset Query Builder 中构建...


SELECT HouseHold.HHID, Client.FIRST_NAME, Client.LAST_NAME 

FROM ((Client 

INNER JOIN HouseHold_Client ON Client.CID = HouseHold_Client.CID) 

INNER JOIN HouseHold ON HouseHold_Client.HHID = HouseHold.HHID)

上面的代码给了我所有 HouseHolds 的列表(他们的 ID)以及属于他们的客户:


HHID  |  FIRST_NAME |  LAST_NAME

------------------------------

1     |  Penelope   |  Grant

1     |  Brian      |  Dyer

2     |  James      |  Newman

2     |  Richard    |  Parsons

..但我无法弄清楚如何让属于同一个 HouseHold 的人出现在同一行上,就像稍后的数据网格视图一样:


HHID | I_FIRST_NAME | I_LAST_NAME | II_FIRST_NAME | II_LAST_NAME

-----------------------------------------------------------------

1    | Penelope     | Grant       | Brian         | Dyer

2    | James        | Newman      | Richard       | Parsons

我发现了很多非常相似的问题,但很少有完全相同的问题需要解决。那些(一两个)确实有同样问题并且有解决方案的人,我就是无法解决我的问题。


非常感谢任何帮助......非常感谢,广告


jeck猫
浏览 91回答 1
1回答

慕斯王

由于每个家庭只有 2 个人,因此您可以使用该技巧来获取每个家庭的最小和最大客户端 ID。这是在子查询中完成的。SELECT    X.HHID,    C1.FIRST_NAME AS I_FIRST_NAME, C1.LAST_NAME AS I_LAST_NAME,    C2.FIRST_NAME AS II_FIRST_NAME, C2.LAST_NAME AS II_LAST_NAMEFROM    ((  SELECT            HHID, Min(CID) AS MinCId, IIf(Max(CID)=Min(CID), Null, Max(CID))  AS MaxCId        FROM HouseHold_Client        GROUP BY HHID    ) X    INNER JOIN Client AS C1        ON X.MinCId = C1.CID)    LEFT JOIN Client AS C2        ON X.MaxCId = C2.CID;该IIf()表达式的目的是仅当最大客户端 Id 与最小客户端 Id 不同时才输出最大客户端 Id。MaxCId要在 为 时也返回记录Null,LEFT JOIN需要在 上C2。我没有加入HouseHold这里的表,因为我们只需要HHID来自它的,它也可以在HouseHold_Client. 如果您需要它的其他列,您当然也可以加入它。子查询:(  SELECT        HHID, Min(CID) AS MinCId, IIf(Max(CID)=Min(CID), Null, Max(CID))  AS MaxCId    FROM HouseHold_Client    GROUP BY HHID) X子查询必须括在括号中并指定一个名称(此处为X)。X充当具有列的普通表HHID,MinCId并MaxCId在主查询中。它按 分组HHID。即,它每个返回一行HHID。Min(CID)返回最小CID和Max(CID)最大的CIDper HHID。在每个 2 个客户端的情况下HHID,这意味着Min和Max将产生这 2 个客户端。如果您只有 1 个客户,则两者都Min将Max返回相同的客户。如果是这种情况,那么IIf将返回Null而不是Max(CID)避免返回同一个客户端两次。
打开App,查看更多内容
随时随地看视频慕课网APP