Sql 按不同行分组

Sql 按不同行分组,sql,sql-server-2008,Sql,Sql Server 2008,我返回了如下所示的行: 2 - Eggs 3 - Bacon 4 - Bacon Smoked 我想按“%Bacon%”分组,以便我的计数为2 如何使用SQL来实现这一点 我应该看到这样的结果: 2 - Eggs 3 - Bacon 4 - Bacon Smoked 鸡蛋-1 培根-2下面的()怎么样 其他解决方案: SELECT Eggs = SUM(CASE WHEN FoodColumn LIKE '%Eggs%' THEN 1 ELSE 0 END), Bacon

我返回了如下所示的行:

2 - Eggs
3 - Bacon
4 - Bacon Smoked
我想按“%Bacon%”分组,以便我的计数为
2

如何使用SQL来实现这一点

我应该看到这样的结果:

2 - Eggs
3 - Bacon
4 - Bacon Smoked
鸡蛋-1
培根-2

下面的()怎么样

其他解决方案:

 SELECT 
    Eggs = SUM(CASE WHEN FoodColumn LIKE '%Eggs%' THEN 1 ELSE 0 END),
    Bacon = SUM(CASE WHEN FoodColumn LIKE '%Bacon%' THEN 1 ELSE 0 END)
 FROM Test
您可以看到演示

如果需要将结果分隔为两行

您可以看到演示


这是一个非常特殊的情况。。你能提供更多的数据吗?这对我有帮助吗

with list (item) as (
    select  
    item
    from (
        values 
            ('Eggs'),
            ('Bacon'),
            ('Bacon Smoked')) list (item)
)
select
    LEFT(item,
        (case 
            when CHARINDEX(' ',item,1) = 0 
            then LEN(item) 
            else CHARINDEX(' ',item,1) end)
    ) filtered,
    COUNT(*)
from list
group by
    LEFT(item,
    (case 
        when CHARINDEX(' ',item,1) = 0 
        then LEN(item) 
        else CHARINDEX(' ',item,1) end))

没有经过测试,但我认为它应该可以工作

SELECT COUNT(*) as QTY, RS.FOOD_TYPE
FROM 
(SELECT 
Case patIndex ('%[ /-]%', LTrim (FOOD_TYPE))
        When 0 Then LTrim (FOOD_TYPE)
        Else substring (LTrim (FOOD_TYPE), 1, patIndex ('%[ /-]%', LTrim (FOOD_TYPE)) - 1)
End FOOD_TYPE
FROM YOUR_TABLE) RS
GROUP BY RS.FOOD_TYPE

使用case语句构建派生的早餐食品列。这不会像@PriceCheaperton要求的那样将结果分成两行。
with list (item) as (
    select  
    item
    from (
        values 
            ('Eggs'),
            ('Bacon'),
            ('Bacon Smoked')) list (item)
)
select
    LEFT(item,
        (case 
            when CHARINDEX(' ',item,1) = 0 
            then LEN(item) 
            else CHARINDEX(' ',item,1) end)
    ) filtered,
    COUNT(*)
from list
group by
    LEFT(item,
    (case 
        when CHARINDEX(' ',item,1) = 0 
        then LEN(item) 
        else CHARINDEX(' ',item,1) end))
SELECT COUNT(*) as QTY, RS.FOOD_TYPE
FROM 
(SELECT 
Case patIndex ('%[ /-]%', LTrim (FOOD_TYPE))
        When 0 Then LTrim (FOOD_TYPE)
        Else substring (LTrim (FOOD_TYPE), 1, patIndex ('%[ /-]%', LTrim (FOOD_TYPE)) - 1)
End FOOD_TYPE
FROM YOUR_TABLE) RS
GROUP BY RS.FOOD_TYPE