【发布时间】:2017-09-12 21:14:30
【问题描述】:
我有一个返回以下结构的查询:
ORDER ID | PRODUCT_NAME | DELIVERY_TYPE | PRIORITY_TYPE
一个订单可能有很多产品。我需要为当前拥有的每个订单获取 Product Name, Delivery Type and Priority Type 的独特组合。所以,如果 10 个订单的Product Name, Delivery Type and Priority Type 完全相同,我只需要得到一次。
仅从查询中删除订单 ID 并获取不同的值将无济于事,因为我不知道哪些记录属于同一 order id。我相信它可以通过循环游标来编写为脚本,只是想知道是否有更优雅的解决方案使用单个 SQL 语句。
本练习的目的如下 - 我们正在重写我们的系统,新设计将不允许每个订单有多种交付类型,因此我们将多种交付类型合并为一个。为此,我们需要了解目前存在的每个订单的所有可能的产品/交付/优先级组合,以便我们可以为每个唯一组合确定一个正确的单个值。
这是数据样本:
作为查询的结果,我只需要获取 PRODUCT_NAME、DELIVERY_TYPE 和 PRIORITY_TYPE 的唯一集合,因此在上面的示例中,我想获取以下内容:
请注意,订单 ID 的 2 和 4 不会出现在此处,因为它们与订单 ID 的 1 和 3 具有相同的值集。实际上,订单 ID 在输出中并不重要,它们只是作为属于同一订单的不同记录集的指示器。
【问题讨论】:
-
所以,如果10个订单的Product Name、Delivery Type和Priority Type完全相同,我只需要得到一次。嗯,这正是@的定义987654327@。也许你想切换到
GROUP BY Product Name, Delivery Type,并添加MAX/MIN(ORDER ID)。 -
您不需要光标。但是,您确实需要发布一些示例数据以供任何人帮助您。正如你所拥有的,看起来你只需要使用
GROUP BY进行分组。 -
"如果10个订单的产品名称、发货类型和优先级类型完全相同,我只需要得到一次。" . . .其他 9 个订单呢?
-
至 dnoeth - 您的解决方案将返回具有特定字段值的最小/最大订单 ID。我需要其他东西 - 属于同一订单 ID 的多条记录的唯一列表。
-
致 Gordon Linoff - 我不需要订单 ID 列表,我只需要属于同一订单 ID 的一组唯一的多条记录。
标签: sql sql-server sql-server-2008 tsql sql-server-2008-r2