我希望从下面的数据集中获得以下结果。我尝试使用左函数,但由于每行字符数不同,它将无法工作。我有741行像这样,但我只需要行只有类别,子类别是不需要的。
数据集:
就餐->早餐
餐厅->早餐->休闲餐厅
餐厅->早餐->QSR_
Dining->Breakfast->QSR_Restaurants->Chick_Fil_A
就餐->休闲餐厅
就餐->休闲餐厅只限于PIQonly
就餐->休闲餐厅->苹果蜜蜂
娱乐->电影院
娱乐->电影院->AMC_剧院
娱乐->电影院->卡米克电影院
娱乐->专业体育场馆
Entertainment->Professional_Sports_Venues->MLB_Stadiums
Entertainment->Professional_Sports_Venues->MLS_Stadiums
发布于 2017-11-01 01:02:04
一种方法是从您的结果中排除2级以上的所有记录:
create table #a (cat varchar(500))
insert into #a (cat)
values ('Dining->Breakfast')
,('Dining->Breakfast->Casual_Restaurants')
,('Dining->Breakfast->QSR_Restaurants')
,('Dining->Breakfast->QSR_Restaurants->Chick_Fil_A')
,('Dining->Casual_Restaurants')
,('Dining->Casual_Restaurants_PIQonly')
,('Dining->Casual_Restaurants->Applebees')
,('Entertainment->Movie_Theaters')
,('Entertainment->Movie_Theaters->AMC_Theaters')
,('Entertainment->Movie_Theaters->Carmike_Cinema')
,('Entertainment->Professional_Sports_Venues')
,('Entertainment->Professional_Sports_Venues->MLB_Stadiums')
,('Entertainment->Professional_Sports_Venues->MLS_Stadiums')
SELECT cat
FROM #a
WHERE cat NOT LIKE '%->%->%'在上面的查询中,我们使用一个类似的模式来排除超过2个级别的记录(通过让->在列表中出现两次来标识)。
发布于 2017-11-01 00:55:25
下面的示例代码使用CharIndex查找字符串中第二个'->‘的开始。为了确保始终有第二个'->‘’,它将其附加到字符串的末尾.
这个逻辑确实假定所有类别至少包含两个级别。如果没有,则需要调整逻辑(可能使用case语句来测试有多少级别)。
DECLARE @val varchar(200) = 'Dining->Breakfast->QSR_Restaurants->Chick_Fil_A'
SELECT LEFT(@val+'->', CHARINDEX('->', @val+'->', CHARINDEX('->', @val+'->', 0) + 2)-1)https://stackoverflow.com/questions/47046184
复制相似问题