sql - 在 SQL Server 中,如何对表中匹配的数据集进行编号?
问题描述
鉴于下面显示的一组数据,我需要能够根据&列optionGroupNumber
中的值推导出右侧的值。因此,对于 Order 1,为详细信息键 1 和 2 选择的选项相同(绿色阴影),因此它们的值为 1。详细信息键 3(蓝色阴影)与 1 和 2 具有不同的选项集,因此它得到2 作为它的.optionType
optionValue
optionGroup
optionGroupNumber
Optionvalues
由用户任意输入,因此它们可以是任何东西。
如何使用 T-SQL 来做到这一点?
解决方案
这个要求很难理解,所以我会根据这个来回答:
鉴于下面显示的一组数据,我需要能够根据 optionType 和 optionValue 列中的值推导出右侧 optionGroupNumber 中的值。
假设我们有一张带有动物和颜色的表格,我们想根据相同类型和颜色的动物创建一个组号。我们会像这样使用 RANK() 来做到这一点:
-- sample data
DECLARE @sometable TABLE (someId int identity, pet varchar(20), color varchar(20));
INSERT @sometable (pet, color)
VALUES ('cat','blue'),('pig','green'),('cat','yellow'),('pig','green'),('cat','yellow'),
('cat','blue'),('dog','black'),('dog','white'),('pig','green'),('dog','black');
-- group by pet and color
SELECT *, OptionGroupNumber = DENSE_RANK() OVER (ORDER BY pet, color)
FROM @sometable;
结果:
someId pet color OptionGroupNumber
----------- -------------------- -------------------- --------------------
1 cat blue 1
6 cat blue 1
3 cat yellow 2
5 cat yellow 2
10 dog black 3
7 dog black 3
8 dog white 4
9 pig green 5
4 pig green 5
2 pig green 5
请注意分组的工作原理:
要更新和现有列,您将采用此逻辑并将其应用于 UPDATE 语句,如下所示:
-- sample data
DECLARE @sometable TABLE
(someId int identity, pet varchar(20), color varchar(20), OptionGroupNumber int);
INSERT @sometable (pet, color)
VALUES ('cat','blue'),('pig','green'),('cat','yellow'),('pig','green'),('cat','yellow'),
('cat','blue'),('dog','black'),('dog','white'),('pig','green'),('dog','black');
WITH generateOptionGroupNumber AS
(
SELECT *, newOptionGroupNumber = DENSE_RANK() OVER (ORDER BY pet, color)
FROM @sometable
)
UPDATE generateOptionGroupNumber
SET OptionGroupNumber = newOptionGroupNumber
SELECT *
FROM @sometable
ORDER BY OptionGroupNumber;
推荐阅读
- javascript - 我无法将几何图形转换为 openlayers 5.3 中 proj4.defs 中定义的投影
- android - 将Android状态栏设置为完全透明无法正常工作
- javascript - stop case sensitive sorting array
- c - 结构数组在声明时存储垃圾
- c# - RenameColumn 在 EF Core 代码优先迁移中不起作用 - 使用 MySql (AWS Aurora)
- sql - 我想停止 nohup 脚本
- c# - How to show message box without console or form in background?
- reactjs - autoHideDuration 不适用于状态更改
- angular - Reactive Form with Form Builder
- amazon-mws - 亚马逊 MWS 美国商城:如何获取订单行使用的税率?