假设我有一个看起来像这样的表(抱歉使用图片,但我无法弄清楚如何在SO上获得格式良好的表...):
我想查询按照它们出现的食谱频率对成分进行排序。所以在这个例子中,我们希望看到以下输出:
我当时认为LIKE和IN可能有助于进行此搜索,但我不确定如何从那里开始。
答案 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语句和按订单分组。