通过vlookup清理sql查询中的mysql数据

drnojrws  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(386)

我有一个查询,它在以下列中提取销售数据:
购买日期
产品id
产品名称
价格
然而,在业务的早期,一些产品id的输入格式是错误的。目前我有一个excel文件,在a列中有旧的/错误的id,在b列中有正确的id。
我想知道是否有一种方法可以编写一个查询来查看产品id是否在列表的a列中。如果为true,它将从b列返回正确的id,如果为false,它将从数据库返回产品id。
在excel中,我将按以下方式执行:=iferror(vlookup(productid,id fixsheeta:b,2,false),产品id)
样本数据


# Created On        Item IDs  Product Name   Price

1   26/02/2018 10:51    ABC1    Product Name 1  99
2   26/02/2018 10:22    G7781   Product Name 2  1299
3   26/02/2018 10:23    L5303   Product Name 3  165
4   26/02/2018 10:24    G9576   Product Name 4  1999
5   26/02/2018 10:26    ABC2    Product Name 5  99
6   26/02/2018 10:30    GGG1    Product Name 6  469
7   26/02/2018 10:37    T1283   Product Name 7  299
8   26/02/2018 10:42    L4505   Product Name 8  329
9   26/02/2018 10:48    L3007   Product Name 9  99

如你所见,我们的产品使用l、g或t后跟数字。三个垂直方向各一个字母。然而,有些在早期已经添加了或ggg前缀。

Column A   Column B
    ABC1    L886
    ABC2    L5632
    GGG1    G7268

这就是为什么我有一个额外的文件,在a列中有旧的/不正确的ID,在b列中有正确的ID。
我想要的结果是按垂直方向(以l、t或g开头的id)对销售数据进行分组。但在此之前,我需要做一些查找,以修复不正确的项目ID排序。

dddzy1tm

dddzy1tm1#

如果正确的值以db为单位

drop table if exists t,t1;

create table t( id int, itemid varchar(20));

insert into t values
(1 ,     'ABC1' ),   
(2 ,     'G7781'),  
(3 ,     'L5303'),  
(4 ,     'G9576'),  
(5 ,     'ABC2' ),  
(6 ,     'GGG1' ),  
(7 ,     'T1283'),   
(8 ,     'L4505'),   
(9 ,     'L3007');

create table t1(Columna varchar(20),Columnb varchar(20));
insert into t1 values
(    'ABC1'   , 'L886'),
(    'ABC2'   , 'L5632'),
(    'GGG1'   , 'G7268');

select left(
         case when t1.columnb is not null then t1.columnb
         else t.itemid
         end ,1)  vertical,
         count(*) obs
from t
left join t1 on t1.columna = t.itemid
group by left(case when t1.columnb is not null then t1.columnb
         else t.itemid
         end ,1);

+----------+-----+
| vertical | obs |
+----------+-----+
| G        |   3 |
| L        |   5 |
| T        |   1 |
+----------+-----+
3 rows in set (0.00 sec)

相关问题