mysql的sql生成一个唯一值作为一列_一个巧妙搭配的组合:INDEX 和 MATCH 函数

INDEX函数和MATCH函数结合,能够实现任意方向的数据查询,使数据查询更加灵活简便。

1、使用INDEX函数进行检索INDEX函数能够在一个区域引用或数组范围中,根据指定的行号或(和)列号来返回值或引用。INDEX函数的语法有引用和数组两种形式。数组形式语法如下。

083c69b875057036597082348c53ff8b.png

第1参数为检索的单元格区域或数组常量。如果数组只包含一行或一列,则相应的row_num或column_num参数是可选的。如果数组具有多行和多列,并且仅使用row_num或column_num,则INDEX返回数组中整个行或列的数组。2参数row_num代表数组中的指定行,函数从该行返回数值。如果省略row_num,则需要有第3参数column_num。第3参数column_num为可选参数,代表数组中的指定列,函数从该列返回数值。如果省略该参数,则需要有第2参数row_num。引用形式语法如下。

e34398b4ec41f5a7e795f44fe677cc5e.png

第1参数reference是必需参数,为一个或多个单元格区域的引用,如果需要输入多个不连续的区域,则必须将其用小括号括起来。第2参数row_num是必需参数,为要返回引用的行号。第3参数[column_num]是可选参数,为要返回引用的列号。第4参数[area_num]是可选参数,为要选择返回用引用的区域。如下图所示,A1:D4单元格区域中是需要检索的数据。

d93bb67d6a0e64afcd08ef1b426c4bbc.png

以下公式为返回A1:D4单元格区域中第3行和第4列交叉处的单元格,即D3单元格的值12。

75fcbad5aa8cf35b132a871af6e84ad1.png

以下公式为返回A1:D4单元格区域中第3行单元格的和,即A3:D3单元格区域的和42。

ea763657730ee6109a482c499b0d2f24.png

以下公式为返回A1:D4单元格区域中第4列单元格的和,即D1:D4单元格区域的和40。

00ab1bdc90922ec6cccb9a047ddc6635.png

以下公式返回(A1:B4,C1:D4)两个单元格区域中的第二个区域第3行第1列的单元格,即C3单元格。由于INDEX函数的第1参数是多个区域,因此用小括号括起来。

4b3e7faa72ff961b119f41d523f427c1.png

根据公式需要,INDEX函数的返回值可以为引用或是数值。例如,如下第一个公式等价于第二个公式,CELL函数将INDEX函数的返回值作为B1单元格的引用。

12c0bb2018a50cf74b038202e72886c8.png

而在以下公式中,则将INDEX函数的返回值解释为B1单元格中的数字。

2b98192400087e8985a920b0e3c91502.png

2、单行(列)数据转换为多行多列ROW函数可以生成垂直方向连续递增的自然数序列,COLUMN函数可以在水平方向上生成连续递增的自然数序列。ROW函数和COLUMN函数组合可以生成指定规则的序列,结合INDEX函数,可以实现将单列或单行数据转换为多行多列。如下图所示,A2:A13单元格区域为零件库存基本信息,从A2单元格起,每3个单元格为一组。要求将A2:A13单元格区域的单列数据转换为C2:E5单元格区域的形式,每个零件占1行3列。

1f242a8e305bfba11d209b942c8ceedd.png

在 C2 单元格输入以下公式,将公式复制到 C2:E5 单元格区域。

830a1ed9ef70c56a6a32f7ba7bf34787.png

公式中的“3*ROW(A1)-3+COLUMN(A1)”部分,计算结果为1,公式向下复制时,ROW(A1)依次变为ROW(A2)、ROW(A3)……公式计算结果分别为4,7,10……即生成步长为3的递增数列。公式向右复制时,COLUMN(A1)依次变为COLUMN(B1)、COLUMN(C1)……计算结果为2,3……即生成步长为1的递增数列。“3*ROW(A1)-3+COLUMN(A1)”部分生成的结果如下图所示。

41f0d29d37ea3b277d6efad5c30d1e60.png

最后用INDEX函数,根据以上公式中生成的数列提取A列中对应单元格的内容,实现将单列数据转换为多行多列数据的目的。3 使用MATCH函数返回查询项的相对位置MATCH函数用于根据指定的查询值,返回该查询值在一行(一列)的单元格区域或数组中的相对位置。若有多个符合条件的结果,MATCH函数仅返回第一次出现的位置。其函数语法如下。

d75924f281c0ed977bd1aeaa0032cb8a.png

第1参数lookup_value为指定的查找对象。第2参数lookup_array为可能包含查找对象的单元格区域或数组,这个单元格区域或数组只可以是一行或一列,如果是多行多列则返回错误值#N/A。第3参数[match_type]是可选参数,为查找的匹配方式。当第3参数为0、1或省略、-1时,分别表示精确匹配、升序模式下的近似匹配和降序模式下的近似匹配。如果简写第3参数的值,仅以逗号占位,表示使用0,也就是精确匹配方式,如“MATCH("ABC",A1:A10,0)”等价于“MATCH("ABC",A1:A10,)”。在精确匹配模式下,MATCH函数的第1参数支持使用通配符。例1:当第3参数为0时,第2参数不需要排序。以下公式返回值为3。其含义为在第2参数的数组中,字母“A”第一次出现的位置为3。

b95d131669ef4db80e62d1b6042740bb.png

例2:当第3参数为1或省略第3参数值时,第2参数要求按升序排列,如果第2参数中没有具体的查找值,将返回小于第1参数的最大值所在位置。以下两个公式返回值都为2,由于第2参数没有查询值4,因此以小于4的最大值也就是3进行匹配。3在第2参数数组中是第2个,因此结果返回2。

0cb46c0d55bfef6affeb4cd9e9952744.png

例3:当第 3 参数为 -1 时,第 2 参数要求按降序排列,如果第 2 参数中没有具体的查找值,将返回大于第 1 参数的最小值所在位置。以下公式返回值为 3,由于第 2 参数中没有查询值 5,因此以大于 5 的最小值也就是 6 进行匹配。6 在第 2 参数数组中是第 3 个,因此结果返回 3。

8a41abfe19c7664b94de32e123d34751.png

第3参数为0的精确匹配时,第1参数的查找值中可以使用通配符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值