2014-09-28 3 views
2

Как мне группировать только некоторые из выбранных выше столбцов в моем запросе на выбор?Группа Только для некоторых количеств

Неверный, но легкий ответ Я бы подумал, что этот код;

SELECT TOP 5 brand, name, delivered, count(*) 
From myTB 
Where type = 'jeans' 
Group By brand, name 
Order By Count(*) DESC 

Результат, который я должен, должен возвращать приведенные ниже результаты; (приведенный выше код является неправильным и возвращает ошибку)

Brand  name  Delivered Count 
------------------------------------- 
Levis  304 Slim 9/24  44 
Croccer 500 Lose 3/14  22 
Croccer 400 Botcut 4/7  14 
Lee  Botcut 33 5/5  16 
Lee  Slim 44 10/7  12 

В приведенных выше результатах я получаю бренды вместе после того, как друг с другом, даже thuo счетчик не По убыванию.

Я пробовал и самое близкое, что я получаю с этим кодом;

SELECT TOP 5 brand, name, delivered, count(*) 
From myTB 
Where type = 'jeans' 
Group By brand, name, delivered 
Order By Count(*) DESC 

Но это возвращает данные следующим образом;

Brand  name  Delivered Count 
------------------------------------- 
Levis  304 Slim 9/24  44 
Croccer 500 Lose 3/14  22 
Lee  Botcut 33 5/5  16 
Croccer 400 Botcut 4/7  14 
Lee  Slim 44 10/7  12 

Если я пытаюсь использовать «порядок по количеству (*), бренд» я получаю, по какой-то причине, бренды в убывающем regardles порядка значения счетчика. Он швы, как будто он только заказывает колонку бренда, а не как марку, так и счет

Я также попытался сделать левое соединение в одной таблице, так что мне нужно было только Group By в основной таблице, но это тоже не так, и код, который я придумал, был действительно запутанным, поэтому я собираюсь оставить это вне этой темы.

Спасибо за помощь, которую я могу получить.

ответ

2

Похоже, что вы хотите сделать заказ максимальным количеством в бренд первого и бренда второй.

select top 5 t1.* from (
    select brand, name, delivered, count(*) 
    from myTB 
    where type = 'jeans' 
    group by brand, name, delivered 
) t1 join (
    select brand, cnt 
    from (
     select brand, cnt, 
     row_number() over (partition by brand order by cnt desc) rn 
     from (select brand, count(*) cnt from myTB group by brand, name, delivered) t1 
    ) t1 
    where rn = 1 
) t2 on t1.brand = t2.brand 
order by t2.cnt desc, t2.brand 
+0

Пятно на. Это сделало то, что я был после. Мне нужно было добавить имя для count (*), чтобы он работал. (count (*) AS numberofjeans). Спасибо большое FuzzyTree – Slint

0

попробовать этот

select TOP 5 t1.* from (SELECT brand, name, delivered, count(*)as 'test' 
From myTB 
Where type = 'jeans' 
Group By brand, name,delivered 

) в порядке t1 по t1.test убыв

+0

Попытка, но я получаю следующую ошибку; Msg 1033, уровень 15, состояние 1, строка 5 Предложение ORDER BY недействительно в представлениях, встроенных функциях, производных таблицах, подзапросах и общих табличных выражениях, если не указано значение TOP, OFFSET или FOR XML. – Slint

+0

я отредактировал ответ, попробуйте сейчас, я ставлю порядок из подзапроса –

Смежные вопросы