2015-05-11 3 views
0

Какой лучший способ «ВЫБРАТЬ» список полей из таблицы/представления (с критериями «ГДЕ») и «ОТСУТСТВУЕТ»? наряду с этим подсчитывают количество повторений того, что содержимое поля повторяется в таблице/представлении?SQL Server - подсчитайте количество повторений содержимого указанного поля в таблице

Другими словами, у меня есть первоначальный вид, который выглядит немного как это:

Initial Table/View

Я хотел бы один запрос SQL для фильтрации его (SELECT ... WHERE ...) так что мы рассматриваем только те записи, где [ORDER COMPLETE] = False и [ЛИЧНО] = Null ...

Filtered out any TRUE values

... а затем создать четкий список имен с отсчетами количество раз каждое имя появляется в предыдущем s таблица:

Distinct list of names with Count field

* Отображение [ORDER COMPLETE] и [ЛИЧНЫЕ] поле является избыточной по этому вопросу и может быть отброшена, чтобы упростить.

Я могу сделать шаги индивидуально, как указано выше, но изо всех сил пытаюсь получить один запрос, чтобы сделать все это ... любая помощь была оценена!

Спасибо заранее,

-Tim

+1

'ВЫБРАТЬ , COUNT (*) FROM

WHERE GROUP BY ' –

+1

Это выглядит как очень простой запрос' COUNT (*) '. Вы столкнулись с какой-то проблемой? Вы пробовали что-то, что не сработало? –

ответ

0

Это должно быть просто следующая

SELECT dbo.tblPerson.Person, 
     COUNT(dbo.tblPerson.Person) AS Count 
    FROM dbo.tblPerson 
INNER JOIN dbo.tblNotifications ON dbo.tblPerson.PersonID = dbo.tblNotifications.AddresseeID 
WHERE dbo.tblNotifications.Complete = 'False' 
    AND dbo.tblNotifications.Personal IS NULL 
GROUP BY dbo.tblPerson.Person 
ORDER BY COUNT(dbo.tblPerson.Person) DESC 

Вам не нужны ваши DISTINCT или TOP 100 ПРОЦЕНТОВ,

Here является упрощенной скрипкой

+0

Спасибо за очищение кода! У меня только один вопрос: не последняя строка: "ORDER BY COUNT (dbo.tblPerson.Person) DESC" Просто добавьте ненужную обработку? Учитывая, что мы уже выполнили COUNT и назвали его «Count» can not, мы просто «ORDER BY Count DESC» ? – Timbo

+0

Вы можете просто использовать псевдоним, но SQL-процессор не будет использовать псевдоним, чтобы «сохранить» результат подсчета, и если они не совпадают с выполнением вычисления снова, он будет определять его самым быстрым способом и выполнять только требуемые операции один раз. В обоих случаях план запроса будет идентичным. (Просто протестируйте это в локальной базе данных, а планы запросов совпадают) –

0

Ну я получил downvoted в Лету (вероятно, для отображения в полной мере моего собственного невежества!), Но только в том случае, если кто из будущего испытывает те же проблемы как и я, и спотыкается по этому вопросу, в то время как Googling (или какой-либо глагол, который вы используете для «поиска всех оцифрованных человеческих знаний» в отдаленном будущем), вот какой-то дезинфицированный код запроса, который мне удалось получить в конце работы - благодаря таланту Марка Синкинсона фрагмент для того, чтобы помочь мне осознать очевидное ...

SELECT DISTINCT TOP (100) PERCENT dbo.tblPerson.Person, COUNT(dbo.tblPerson.Person) AS CountPerson 
FROM  dbo.tblPerson INNER JOIN 
dbo.tblNotifications ON dbo.tblPerson.PersonID = dbo.tblNotifications.AddresseeID 
WHERE (dbo.tblNotifications.Complete = 'False') AND (dbo.tblNotifications.Personal IS NULL) 
GROUP BY dbo.tblPerson.Person 
ORDER BY CountPerson DESC 
Смежные вопросы