2013-07-31 2 views
1

Неслучайно новый для SQL. Я пытаюсь подсчитать общее количество идентификаторов бронирования в запросе на праздники, которые иногда бывают в двух регионах.Ошибка подсчета при вводе нового столбца

Это хочет мне нужно ..

ID  count Region name 
427139  1 France 
427776  2 Spain 
427776  2 France 

Но, кажется, только для доставки этого ..

ID  count Region name 
427139  1 France 
427776  1 Spain 
427776  1 France 

Заказы идентификаторы уникальны, но получить разбитый на 2 строки, когда я ввожу область из моего региона таблица (с помощью цитат и таблиц свойств.)

Вот мой SQL ..

SELECT count(BO.ID) as Count, 
     BO.ID AS 'Booking ID', 
     RE.Name AS 'Region name' 
FROM Booking BO WITH (NOLOCK) 
    LEFT JOIN Quote QU WITH (NOLOCK) ON QU.ID = BO.QuoteID 
    LEFT JOIN Property PR WITH (NOLOCK) ON PR.Code = QU.Code 
    LEFT JOIN Region RE WITH (NOLOCK) ON RE.ID = PR.RegionID 
WHERE BO.ID = '427776' OR BO.ID = '427139' 
Group by BO.ID,RE.Name 
ORDER BY BO.ID 

Может ли кто-нибудь помочь?

Спасибо, что посмотрели!

+0

Почему вы ожидаете «2» для этих строк? Вы хотите подсчитать общие регионы на каждый идентификатор в каждой строке? И какую базу данных вы используете? – Joe

+0

Какая система баз данных вы используете? –

+0

Хотелось показать общие регионы на BO.ID, чтобы я мог указать общий размер бронирования. Ниже работает для меня! – Mike

ответ

0

В SQLServer2005 + вы можете использовать OVER() положение с агрегатной функции COUNT()

SELECT COUNT(*) OVER(PARTITION BY BO.ID) as [Count], 
     BO.ID AS 'Booking ID', 
     RE.Name AS 'Region name' 
FROM Booking BO WITH (NOLOCK) 
    LEFT JOIN Quote QU WITH (NOLOCK) ON QU.ID = BO.QuoteID 
    LEFT JOIN Property PR WITH (NOLOCK) ON PR.Code = QU.Code 
    LEFT JOIN Region RE WITH (NOLOCK) ON RE.ID = PR.RegionID 
WHERE BO.ID = '427776' OR BO.ID = '427139' 
GROUP BY BO.ID, RE.Name 
ORDER BY BO.ID 

Я думаю, что запрос в новом формате может быть использована без предложения GROUP BY

SELECT COUNT(*) OVER(PARTITION BY BO.ID) as [Count], 
     BO.ID AS 'Booking ID', 
     RE.Name AS 'Region name' 
FROM Booking BO WITH (NOLOCK) 
    LEFT JOIN Quote QU WITH (NOLOCK) ON QU.ID = BO.QuoteID 
    LEFT JOIN Property PR WITH (NOLOCK) ON PR.Code = QU.Code 
    LEFT JOIN Region RE WITH (NOLOCK) ON RE.ID = PR.RegionID 
WHERE BO.ID = '427776' OR BO.ID = '427139' 
ORDER BY BO.ID 
+1

Отлично !, оба работают для меня. Очень ценю вашу помощь с этим. – Mike

0

Try чтения (это было лучшее звено, которое я мог найти):

http://www.w3resource.com/sql/group-by.php

GROUP BY собирает ваши результаты в группы, а затем агрегатная функция вызывается для каждой группы. Поскольку вы группируетесь по ID и региону, вы получите счетчик для этого идентификатора и региона, а не только для этого идентификатора.

Так что это вопрос выбора группы, в которую вы хотите получить счет.

+0

(хотя у mysql есть несколько разных действий для GROUP BY, поэтому Алекс спрашивает, какую у вас систему БД) –

+0

Привет, Грэм, спасибо, прочитает. Не уверен, что будет в базе данных! – Mike

+1

, и я буду читать на OVER/PARTITION;), по-видимому, он полезен именно в вашем случае использования ... когда вам нужна сводная информация для какой-либо группы, фактически не сворачивая группу в одну строку –

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