首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从第二个表返回多于1行的内连接

从第二个表返回多于1行的内连接
EN

Stack Overflow用户
提问于 2017-03-01 09:38:24
回答 4查看 102关注 0票数 0

我有两个表(SimCard)和(Rental_SimCard)

Simcard只包含该simcard的信息,如id、电话号码、simcard号码。

Rental_SimCard将为每一次简单卡的租金添加一个记录

代码语言:javascript
复制
Rental_SimCard - SimCardID - DateOut  - DateIn
 0              - 1         - 1/3/2017 - 1/4/2017
 1              - 1         - 1/5/2017 - 1/6/2017
 2              - 1         - 1/7/2017 - NULL
 3              - 2         - 1/7/2017 - NULL
 4              - 3         - NULL     - NULL

我想显示simcard的记录,它只有当DateOut为NULL时才有最大的DateOut。

我目前使用的代码

代码语言:javascript
复制
    string sqlquery = "Select *, " +
        "CASE WHEN MAX(CASE WHEN DateOut IS NULL THEN 1 ELSE 0 END) = 0 THEN " +
        "MAX(DateOut) END AS MaxDateOut FROM SimCard INNER JOIN Rental_SimCard ON Rental_SimCard.SimCardID=SimCard.SimCardID " +
        "GROUP BY (Every Single Column In the two tables)

我按每一列分组,因为我一直收到这个错误。

列'SimCard.SimCardID‘在select列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。

现在,我的查询为在Rental_SimCard中重新创建的每条记录从simcard表返回一个副本。

我想要的结果应该是

代码语言:javascript
复制
Rental_SimCard - SimCardID - DateOut(MAX)  - DateIn - SimCardRecords...
 2              - 1         - 1/7/2017      - NULL   - ...
 3              - 2         - 1/7/2017      - NULL   - ...
 4              - 3         - NULL          - NULL   - ...
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-03-01 09:51:45

您也可以使用CROSS APPLY

代码语言:javascript
复制
SELECT *
FROM SimCard S
CROSS APPLY (SELECT TOP 1 *
             FROM Rental_SimCard R
             WHERE R.SimCardId=S.SimCardId
             ORDER BY DateOut DESC) T
票数 1
EN

Stack Overflow用户

发布于 2017-03-01 09:44:32

代码语言:javascript
复制
SELECT MAX(Rental_SimCard)
    ,SimCard.SimCardId
    ,MAX(DATEOut)
    ,MAX(DateIn)
    ,MAX(SimCardRecords)
FROM SimCard
INNER JOIN RENTAL_SIMCARD ON SimCard.SimCardId = Rental_SimCard.SimCardID
GROUP BY SimCard.SimaCardId
票数 3
EN

Stack Overflow用户

发布于 2017-03-01 09:53:32

简单地用SimCardId进行内部连接和分组

代码语言:javascript
复制
SELECT s.SimCardId
    ,max(Rental_SimCard)
    ,max(DATEOut)
    ,max(DateIn)
    ,max(SimCardRecords)
FROM SimCard s
INNER JOIN RENTAL_SIMCARD rs ON s.SimCardId = rs.SimCardID
GROUP BY s.SimCardId
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42528181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档