为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
jeck猫 2022-11-21 15:47:06
我在 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   |  Grant1     |  Brian      |  Dyer2     |  James      |  Newman2     |  Richard    |  Parsons..但我无法弄清楚如何让属于同一个 HouseHold 的人出现在同一行上,就像稍后的数据网格视图一样:HHID | I_FIRST_NAME | I_LAST_NAME | II_FIRST_NAME | II_LAST_NAME-----------------------------------------------------------------1    | Penelope     | Grant       | Brian         | Dyer2    | James        | Newman      | Richard       | Parsons我发现了很多非常相似的问题,但很少有完全相同的问题需要解决。那些(一两个)确实有同样问题并且有解决方案的人,我就是无法解决我的问题。非常感谢任何帮助......非常感谢,广告
查看完整描述

1 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

由于每个家庭只有 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_NAME

FROM

    ((  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)避免返回同一个客户端两次。


查看完整回答
反对 回复 2022-11-21
  • 1 回答
  • 0 关注
  • 90 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信