Мне нужна помощь для очистки базы данных выходных строк на основе нескольких условий - PullRequest
0 голосов
/ 24 июня 2018

Я решил написать сообщение на форуме, чтобы спросить, может быть, у кого-то была похожая задача или у него есть опыт работы с SQL, чтобы помочь мне с отчетом, который я должен предоставить.

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

Мне удалось удалить те, которые содержат конечный тег '>', но я борюсь с удалением другихперсонажи.Ниже приведен мой текущий запрос с текущим выводом и ожидаемым результатом.

Пожалуйста, кто-нибудь может посмотреть и помочь, если это возможно.

SELECT
    SUBSTRING(Category, 1 ,
        CASE 
           WHEN CHARINDEX('>', Category) = 0 THEN LEN(Category)
           WHEN CHARINDEX(',', Category) = -1 THEN LEN(Category)
           ELSE CHARINDEX('>', Category) -1 
        END) AS 'Category',
    COUNT(Category) AS 'No. Listings'
FROM
    tbl_Listing
GROUP BY
    SUBSTRING(Category, 1 ,
        CASE 
           WHEN CHARINDEX('>', Category) = 0 THEN LEN(Category)
           WHEN CHARINDEX(',', Category) = -1 THEN LEN(Category)
           ELSE CHARINDEX('>', Category) -1 
        END) AS 'Category',

В настоящее время

ID ¦ Category                   ¦
---+----------------------------- 
1  | eating,places-to-go
2  | education,clubs,
3  | education,library.
4  | education,parties.
5  | local-service/,    
6  | places-to-go,service,
7  | Null

Ожидаетсярезультат

ID ¦ Category                   ¦
---+----------------------------- 
1  | eating
2  | education
3  | education
4  | education
5  | local-service
6  | places,
7  | Null

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Вместо charindex() используйте patindex():

select left(category, patindex('%[,/>]%', category + ',') - 1) as CleanString

Это значительно упрощает добавление дополнительных "нечетных" символов.

0 голосов
/ 24 июня 2018

Обратите внимание, что в CHARINDEX () мы заменим slash на comma и добавим comma в качестве отказоустойчивого

Непонятно, почему последние места для посещения - это просто места

Пример

Select *
      ,CleanString = left([Category],charindex(',',replace([Category],'/',',')+',')-1)
 From  YourTable

Возвращает

ID  Category                CleanString
1   eating,places-to-go     eating
2   education,clubs,        education
3   education,library.      education
4   education,parties.      education
5   local-service/,         local-service
6   places-to-go,service,   places-to-go
7   NULL                    NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...