Как разбить столбец по идентификатору (|) и получить первый элемент и сгруппировать по? - PullRequest
1 голос
/ 14 февраля 2020

У меня есть таблица категории и атрибут

Этот tag_id является последовательностью или шаблоном того, что является его родителем или дочерним элементом.

Пример:

CREATE TABLE category (
    id int,
    parent_id int, 
    code varchar(255),
    name varchar(255).
    tag_id varchar(255)
);

INSERT INTO category (id, parent_id, code, name, tag_id)
VALUES
    (1,null,0,'category 1','|1|'),
    (2,null,1,'category 2','|2|'),
    (3,null,2,'category 3','|3|'),
    (4,null,3,'category 4','|4|'),
    (5,4,4,'category 5','|4|5|'),
    (6,5,5,'category 6','|4|5|6|');

Как видите, вы можете определить, является ли категория родительской, если первое значение внутри tag_id является ее идентификатором.

Я хочу для группировки по этой категории по тому же первому родительскому идентификатору

Причина: я объединяю эту таблицу с другой таблицей, в которой есть столбец суммы, и я хочу суммировать и группировать с использованием первого родительского идентификатора.

Например, у меня есть таблица продаж, в которой она связана с таблицей продуктов. И эта таблица продуктов связана с таблицей категорий.

В таблице продаж есть столбец total_amount и product_id. Этот product_id связан с идентификатором таблицы товаров. И эта таблица продукта имеет столбец category_id, который связан с идентификатором таблицы категории.

Основная цель - получить СУММУ ИТОГО_ОТ, что была продана категория первого уровня. Мне просто нужно, как разделить это | персонаж и получите только категорию первого уровня

Спасибо!

1 Ответ

1 голос
/ 14 февраля 2020

Если вам нужны первые отдельные значения тега, нет необходимости группировать также

    Select distinct id as tag_id from (SELECT SUBSTRING(s.tag_id,3,CHARINDEX('|',S.tag_id,3)-3) id from category s) temp
...