SQL Query разделить поле - PullRequest
       5

SQL Query разделить поле

0 голосов
/ 06 декабря 2018

database example

Я бы хотел, чтобы для каждого рекламного ролика, обозначенного здесь кодом, было указано количество счетов (на французском языке: фактура), связанных с ним.

Например, здесь, с этой частью базы данных, я хотел бы иметь что-то подобное: R08: 22;R087: 19;R11: 3;R00: 3;R062: 1;R026: 1;

Коммерческий код начинается с 'R', за которым следуют несколько цифр, а если счет связан с более чем одним рекламным объявлением, '|'разделяет коды.Кстати, большинство счетов связано только с одной рекламой.

Моя проблема заключается в том, чтобы делать это только с SQL.если это слишком сложно, я сделаю это с помощью PHP.

Я надеюсь, что мой вопрос понятен и вы узнаете, как мне помочь.

Другой пример данных:

R015        15040205
R012        14250123
R012|R038   14250123
R015|R012   14250123
R005        14250123

Я хотел бы запрос, который возвращает:

R005        1
R038        1
R015        2
R012        3

на самом деле, я хотел бы запрос, который подсчитывает количество вхождений каждого кода. Вторые данные не имеют значения

1 Ответ

0 голосов
/ 06 декабря 2018

Если у вас есть не более двух кодов (как в ваших примерах данных), вы можете использовать substring_index():

select code, count(*)
from ((select substring_index(code_commercial, '|', 1) as code
       from t
      ) union all
      (select substring_index(code_commercial, '|', -1)
       from t
       where code_commercial like '%|%'
      )
     ) c
group by code;

Более важным моментом является то, что ваша модель данных действительно, действительно, действительноплохой.Вы должны это исправить.SQL не предназначен для хранения нескольких значений в одном столбце или для использования строк для хранения данных этого типа.

Требуется таблица соединений с отдельными строками для каждого кода.Тогда ваш запрос будет легче писать и работать быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...