我有一个查询,可以在以下列中提取销售数据:
但是,在业务的早期阶段,某些产品ID的输入格式错误。 目前,我有一个Excel文件,其中A列中的旧/错ID和B列中的正确ID。
我想知道是否有办法编写查询产品ID是否在列表的A列中的查询。如果为True,它将从B列返回正确的ID,如果为False,它将从数据库返回产品ID。
在Excel中我会按以下方式执行:= IFERROR(VLOOKUP(产品ID,ID修订表A: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后跟我们产品的数字。 我们三个垂直中的每一个都有一个字母。 但是,有些人在早期就添加了ABC或GGG前缀。
Column A Column B
ABC1 L886
ABC2 L5632
GGG1 G7268
这就是为什么我在A列中使用旧/不正确ID的额外文件,以及B列中的正确ID。
我想要的结果是按垂直分组销售数据(以L,T或G开头的ID)。但在此之前,我需要做一些Lookup来修复错误的Item ID。
答案 0 :(得分:1)
如果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)