У меня есть запрос, который выводит данные о продажах в следующих столбцах:
Тем не менее, в первые дни бизнеса некоторые идентификаторы продуктов были введены в неправильном формате. На данный момент у меня есть файл Excel со старыми/неправильными идентификаторами в столбце A и правильными идентификаторами в столбце B.
Мне было интересно, есть ли способ написать запрос, который выглядит, если идентификатор продукта находится в столбце A списка. Если True вернет правильный идентификатор из столбца B, если False, он вернет идентификатор продукта из базы данных.
В Excel я бы сделал это следующим образом: = IFERROR (VLOOKUP (идентификатор продукта, идентификатор Fix SheetA: B, 2, FALSE), идентификатор продукта)
Пример данных
# 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 и правильные идентификаторы в столбце B.
В результате я хочу группировать данные о продажах по вертикали (идентификаторы, начинающиеся с L, T или G). Но прежде чем это произойдет, мне нужно сделать какой-то поиск, чтобы исправить неверные идентификаторы элементов.
Если правильные значения находятся в 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)