首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从一个表中为另一个表中的每个唯一记录选择100个记录

如何从一个表中为另一个表中的每个唯一记录选择100个记录
EN

Stack Overflow用户
提问于 2020-09-09 16:34:03
回答 4查看 99关注 0票数 0

我有一张地址表,另一张优惠券。我想选择每个地址10张优惠券。我该怎么做?我知道这是非常基本的,但我已经离开SQL有一段时间了,我试着尽我所能重新熟悉它.

表1

代码语言:javascript
运行
复制
Name      Address
-------------------
Store 1   Address 1
Store 2   Address 2

表2

代码语言:javascript
运行
复制
Coupons
--------
coupon1
coupon2
...
coupon19
coupon20
EN

回答 4

Stack Overflow用户

发布于 2020-09-09 17:11:23

您可以使用窗口函数:

代码语言:javascript
运行
复制
select t1.*, t2.coupons
from (
    select t1.*, row_number() over(order by id) rn
    from table1 t1
) t1
inner join (
    select t2.*, row_number() over(order by id) rn
    from table2 t2
) t2 on (t2.rn - 1) / 10 = t1.rn

其思想是使用row_number()枚举每个表的行,然后使用行号上的一个条件连接结果。以上查询为每个地址提供10张优惠券。

要获得稳定的结果,您需要在每个表中都有一个列(或一组列)来唯一地标识每一行:我假设这两个表中都有id

票数 1
EN

Stack Overflow用户

发布于 2020-09-09 17:00:24

你想要每家商店10张优惠券吗?每家商店100张优惠券吗?你的问题回答与帖子不同。或者你想在所有商店里平均分配所有的优惠券?这个查询中的一些是构建数据以演示输出,但主要关注的是使用NTILE(10)将优惠券分解为十个组,然后可以将一个ROW_NUMBER应用到它,为您提供每个可以连接的id值10张优惠券.

代码语言:javascript
运行
复制
WITH random_data AS
(
    SELECT  ROW_NUMBER() OVER (ORDER BY id) AS nums
    FROM    sysobjects
),  store_info AS
(
    SELECT  ROW_NUMBER() OVER (ORDER BY nums) AS join_id,
            'Store' + CONVERT(VARCHAR(10),nums) AS StoreName,
            'Address' + CONVERT(VARCHAR(10),nums) AS StoreAddress
    FROM    random_data
),  more_random_data    AS
(
    SELECT  ROW_NUMBER() OVER (ORDER BY t2.nums) AS nums
    FROM    random_data t1
    CROSS   JOIN random_data t2
),  coupons AS
(
    SELECT  NTILE(10) OVER (ORDER BY nums) AS group_id,
            'Coupon' + CONVERT(VARCHAR(10),nums) AS Coupon,
            nums
    FROM    more_random_data
),  coupons_with_join_id AS
(
    SELECT  ROW_NUMBER() OVER (PARTITION BY group_id ORDER BY nums) AS join_id,
            Coupon
    FROM    coupons
)
SELECT  StoreName, StoreAddress, Coupon
FROM    store_info AS si
JOIN    coupons_with_join_id AS cwji
    ON  si.join_id = cwji.join_id
ORDER   BY si.join_id, Coupon
票数 0
EN

Stack Overflow用户

发布于 2020-09-09 17:16:38

这里固有的问题是,这两个表之间没有任何关系。因此,您的选项要么强制使用伪关系,就像其他答案显示的那样,要么在这两个表之间创建一个关系,比如向优惠券表中添加一个store_name列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63815892

复制
相关文章

相似问题

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