从JOIN获得单个入口

时间:2016-11-23 09:05:00

标签: sql sql-server

我有这两个表:

stores:
+----------+--------------+
| store_id | store_number |
+----------+--------------+
|        1 |          231 |
|        2 |          132 |
|        3 |          321 |
+----------+--------------+

entrances:
+-------------+----------+-----------------+
| entrance_id | store_id | entrance_number |
+-------------+----------+-----------------+
|           1 |        1 |               1 |
|           2 |        1 |               2 |
|           3 |        2 |               1 |
|           4 |        3 |               1 |
|           5 |        3 |               2 |
|           6 |        3 |               3 |
+-------------+----------+-----------------+

entrance_number是从1开始的每个商店的序列号。我想要做的是JOIN这两个表,然后将1添加到entrance_number,以便为每个商店获得下一个entrance_number

像这样:

SELECT
    store_number,
    entrance_number + 1
FROM
    stores
JOIN
    entrances
ON
    stores.store_id = entrances.store_id

给出了这个结果:

+--------------+-----------------+
| store_number | entrance_number |
+--------------+-----------------+
|          231 |               2 |
|          231 |               3 |
|          132 |               2 |
|          321 |               2 |
|          321 |               3 |
|          321 |               4 |
+--------------+-----------------+

我想要的是获得每个商店的单个顶级入口号码,结果如下:

+--------------+-----------------+
| store_number | entrance_number |
+--------------+-----------------+
|          231 |               3 |
|          132 |               2 |
|          321 |               4 |
+--------------+-----------------+

为每个商店提供下一个entrance_number

如何使用JOIN从入口处获得“单一入口”?

2 个答案:

答案 0 :(得分:2)

您需要应用Group ByMax

 SELECT
        store_number,
        max(entrance_number + 1)
    FROM
        stores
    JOIN
        entrances
    ON
        stores.store_id = entrances.store_id
        group by store_number

答案 1 :(得分:0)

试试这个。

                select store_number,entrance_number from
                ( SELECT
                store_number,
                (entrance_number)+1 AS 'entrance_number ',
                ROW_NUMBER() OVER ( PARTITION BY store_number ORDER BY entrance_number DESC ) AS RankID
                 FROM
                stores S
                JOIN
                entrances E
                ON
                S.store_id = E.store_id    
                )a
                where RankID='1'  -- here You can change RankID as per requirement like for top entrance use 1 or 2nd top use 2

使用MAX和Group by:

            SELECT
            store_number,
            MAX(entrance_number) + 1 AS 'entrance_number '
            FROM
            stores S
            JOIN
            entrances E
            ON
             S.store_id = E.store_id
             GROUP BY store_number