SQL排序基于逗号分隔的字符串?

时间:2015-04-22 21:06:38

标签: sql sqlite

假设我有一个看起来像这样的表(抱歉使用图片,但我无法弄清楚如何在SO上获得格式良好的表...):

Recipes and Ingredients

我想查询按照它们出现的食谱频率对成分进行排序。所以在这个例子中,我们希望看到以下输出:

Sorted ingredients

我当时认为LIKE和IN可能有助于进行此搜索,但我不确定如何从那里开始。

1 个答案:

答案 0 :(得分:0)

我真的无法抗拒“你不能”引用。您的解决方案如下。

SELECT Item
FROM
(
    SELECT LTRIM(x.XmlCol.value('.','varchar(100)')) 'Item'
    FROM 
    (
        SELECT CAST('<A>'+REPLACE(ingredients,',','</A><A>')+'</A>' AS XML) 'Ingredient'
        FROM #recipes ) Mytab
    CROSS APPLY Mytab.Ingredient.nodes('/A') x(xmlcol)
) Listing
GROUP BY ITEM
ORDER BY Count(1) DESC

亲自试试吧。简而言之,您首先用XML分隔符替换逗号,然后为了效率调用Microsofts自己的XML方法将值列表转换为表格输出。然后,您只需将该批次拖放到FROM语句和按订单分组。