2016-07-17 3 views
-2

Я пытаюсь получить общую сумму всех моделей от каждого агентства и выбрать количество каждой модели.SQL Server: выберите общую сумму всех моделей из каждого агентства и выберите количество каждой модели

У нас есть различные таблицы в базе данных агентства автомобилей, у меня есть следующий запрос:

SELECT distinct (c.check) ,cm.description as agency, cms.description as model, co.result 
FROM check c 
INNER JOIN check_obd co on c.idcheck=co.idcheck 
INNER JOIN vehicular_census vc on vc.idvehicularcensus = c.idvehicularcensus 
LEFT JOIN cat_mark cm on vc.idmark=cm.key 
LEFT JOIN cat_mark_submark cms on vc.idmark_submark=cms.idmark_submark 
WHERE c.operation_status=5 

Этот запрос не является идеальным, как он производит:

Before

Я хотел бы, результат будет выглядеть так:

After

Как я могу изменить указанный выше запрос, чтобы получить желаемый результат?

+0

То, что вы ищете, может быть достигнуто простым оператором GROUP BY с подсчетами. например 'SELECT cm.description AS agency, COUNT (cms.description) OVER (PARTITION BY cm.description) AS total, cms.description AS model, COUNT (*) AS количество FROM GROUP BY cm.description, cms .description' ... Чтобы получить этот конкретный результат, вам, вероятно, нужно будет присвоить номер строки (секционированный агентством) в результирующий набор и сделать агентство/полное число нулей, если номер строки не равен 1. – ZLK

+0

Hi ZLK I rn следующий запрос: Привет ZLK Я запускаю следующий запрос: SELECT distinct cm.description as agency, count (cm.description) OVER (PARTITION BY cm.descripcion) как итого, cms.description as model, count (cms. описание) OVER (PARTITION by cms.description) в качестве промежуточного итога FROM check c INNER JOIN check_obd co on c.idcheck = co.idcheck INNER JOIN vehicleular_census vc on vc.idvehicularcensus = c.idve hicularcensus LEFT JOIN cat_mark см на vc.idmark = cm.key LEFT JOIN cat_mark_submark CMS на vc.idmark_submark = cms.idmark_submark WHERE c.operation_status = 5 упорядочить по cm.description –

+0

предыдущий запрос получите мне этот результат: https: //1drv.ms/i/s!Ak2f8MCNYPvQgyI_Rd8lLKP15oB8 ***** Как я могу стереть различные итоговые результаты, чтобы получить только одну общую сумму для каждого агентства? , спасибо: 9 –

ответ

0

Вот пример того, как можно «удалить» лишний материал (используя текущий запрос, в комплект поставки):

SELECT MAX(CASE WHEN rn = 1 THEN colagency ELSE '' END) agency 
    , MAX(CASE WHEN rn = 1 THEN CAST(total AS VARCHAR(255)) ELSE '' END) total 
    , model 
    , subtotal 
FROM (SELECT distinct cm.description as colagency 
    , count(cm.description) OVER (PARTITION BY cm.descripcion) as total 
    , cms.description as model 
    , count(cms.description) OVER (PARTITION BY cms.description) as subtotal 
    , row_number() over (partition by cm.description order by cms.description) rn 
FROM check c 
INNER JOIN check_obd co on c.idcheck=co.idcheck 
INNER JOIN vehicular_census vc on vc.idvehicularcensus = c.idvehicularcensus 
LEFT JOIN cat_mark cm on vc.idmark=cm.key 
LEFT JOIN cat_mark_submark cms on vc.idmark_submark=cms.idmark_submark 
WHERE c.operation_status=5) T 
GROUP BY colagency, model, subtotal 
ORDER BY colagency 

По сути это упаковочному ваш текущий запрос в подзапрос с функцией row_number(), и а затем сделать все, что не является первой строкой для «агентства».

+0

Какое следующее изображение? – ZLK

+0

Привет, ZLK, я запустил предоставленный запрос и, похоже, удалил все повторяющиеся значения, но результаты итогов для каждого агентства печатаются в последнюю позицию, например, следующее изображение: https://1drv.ms/i/s! Ak2f8MCNYPvQgyQ2JIQcASqMCB3T, как я могу поместить каждый итог в начале каждой подмодели, как изображение 2, показанное в главном вопросе? :), btw большое спасибо за потраченное время –

+0

OK. Я считаю, что в приведенном выше исправлении исправлена ​​проблема. По существу переработка внешнего запроса (с незначительным редактированием внутреннего запроса), чтобы вы получили правильную группировку и ожидаемые результаты. – ZLK

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