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