提问人:Andras 提问时间:3/31/2019 最后编辑:ParfaitAndras 更新时间:4/1/2019 访问量:109
C# 数据集设计器 - AccesDB - 将两行合并为一行
C# DataSet Designer - AccesDB - Combine two rows into one
问:
我需要您的帮助来处理 SQL 查询,我正在尝试在 C# 数据集查询生成器中构建该查询...
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
我发现了很多非常相似的问题,但很少有人有相同的问题需要解决。那些(一两个)确实有同样的问题并且它有一个解决方案,我只是无法绕过我的问题。
非常感谢任何帮助... 谢谢 广告
答:
由于每个家庭只有 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;
表达式的目的是仅当最大客户端 ID 与最小客户端 ID 不同时才输出该 ID。要在 时返回记录,需要 a。IIf()
MaxCId
Null
LEFT JOIN
C2
我没有加入这里的表格,因为我们只需要 from it,它也可以在 .当然,如果您需要其他列,也可以加入它。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)
CID
HHID
如果您每个有 2 个客户端,这意味着并将产生这 2 个客户端。如果只有 1 个客户端,则两个客户端都将返回相同的客户端。如果是这种情况,则将返回而不是避免返回两次相同的客户端。HHID
Min
Max
Min
Max
IIf
Null
Max(CID)
评论