2014-10-08 2 views
0

Таблица: mytableКоличество в SQL с группой по имени

Id username pizza-id pizza-size Quantity order-time 
-------------------------------------------------------------- 
1 xyz   2  9   2  09:00 10/08/2014 
2 abc   1  11   3  17:45 13/07/2014 

Это mytable, который имеет 6 столбцов. Id is int, username is varchar, order-time is datetime и остальные integer Тип данных.

Как подсчитать количество заказов со следующими количествами пиццы: 1, 2, 3, 4, 5, 6,7 и выше 7?

Использование запроса T-SQL.

Было бы очень полезно Если кто-нибудь мог помочь мне найти решение.

+0

Ваш вопрос не ясно .. Просьба представить результат выборки, что вы ищете – Wanderer

ответ

0

Если требование, как подсчитать количество заказов с различными количествами пиццы и представляют собой количество заказов, как: 1, 2, 3, 4, 5, 6,7 и рассмотреть все выше подсчетов порядка в новой категории : 'выше 7', то вы можете использовать функцию окна, как:

select case when totalorders < = 7 then cast(totalorders as varchar(10)) 
else 'Above 7' end as totalorders 
, Quantity 
from 
(
    select distinct count(*) over (partition by Quantity order by Quantity asc) 
    as totalorders, 
    Quantity 
    from mytable 
) T 
order by Quantity 

DEMO

Edit: если требование, как подсчитать количество заказов с пиццей величинами: 1, 2, 3, 4 , 5, 6,7 и рассмотрим Л.Л. другие пиццы величины в новой категории: «выше 7», то вы можете написать как:

select distinct 
count(*) over (
       partition by Quantity order by Quantity asc 
      ) as totalorders, 
Quantity 
from ( 
select 
case when Quantity < = 7 then cast(Quantity as varchar(20)) 
else 'Above 7' end as Quantity, id 
from mytable ) T 
order by Quantity 

DEMO

1

Попробуйте

Select CASE WHEN Quantity > 7 THEN 'OVER7' ELSE Cast(quantity as varchar) END Quantity, 
COUNT(ID) NoofOrders 
from mytable 
GROUP BY CASE WHEN Quantity > 7 THEN 'OVER7' ELSE Cast(quantity as varchar) END 

или

Select 

SUM(Case when Quantity = 1 then 1 else 0 end) Orders1, 
SUM(Case when Quantity = 2 then 1 else 0 end) Orders2, 
SUM(Case when Quantity = 3 then 1 else 0 end) Orders3, 
SUM(Case when Quantity = 4 then 1 else 0 end) Orders4, 
SUM(Case when Quantity = 5 then 1 else 0 end) Orders5, 
SUM(Case when Quantity = 6 then 1 else 0 end) Orders6, 
SUM(Case when Quantity = 7 then 1 else 0 end) Orders7, 
SUM(Case when Quantity > 7 then 1 else 0 end) OrdersAbove7 

from mytable 
+0

ли мы что OP хочет 1 строку, а не 8? Возможно, полный ответ будет включать в себя оба (например, «GROUP BY CASE WHEN Quantity> 7 THEN« OVER7 »ELSE Cast (количество как varchar) END' –

1

Попробуйте это!

SELECT COUNT(ID),CASE WHEN QUANTITY<7 THEN QUANTITY ELSE 'ABOVE7' END AS QUANTITIES 
FROM mytable 
GROUP BY CASE WHEN QUANTITY<7 THEN QUANTITY ELSE 'ABOVE7' END 
Смежные вопросы