Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
garvy Member Откуда: Москва Сообщений: 799 |
SELECT COUNT(*) FROM [Служебная] GROUP BY [№товара], Nтпд, Ед, [№заказчика], [Площадка], Габариты |
6 май 14, 14:18 [15979986] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Варианты 1. Ошибка - в 17ой строке 2. 42 |
6 май 14, 14:20 [15980002] Ответить | Цитировать Сообщить модератору |
garvy Member Откуда: Москва Сообщений: 799 |
сорри не ту кнопку нажал. Запрос возвращает число 2, а запрос SELECT [№товара], Nтпд, Ед, [№заказчика], [Площадка], Габариты FROM [Служебная] GROUP BY [№товара], Nтпд, Ед, [№заказчика], [Площадка], Габариты возвращает одну строчку Что за загадка? В исходной таблице всего 2 строки. |
6 май 14, 14:20 [15980005] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Из 2х одинаковых строк прии группировке получится 1 строка |
||
6 май 14, 14:22 [15980024] Ответить | Цитировать Сообщить модератору |
group by
Guest |
а в чем проблема? у вас в таблице две записи с одинаковыми значениями полей [№товара], Nтпд, Ед, [№заказчика], [Площадка], Габариты |
6 май 14, 14:23 [15980029] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47049 |
garvy, можете считать, что и в этом последнем случае тоже посчиталось COUNT(*), просто в результат не попало, ибо не указано в списке SELECTа ![]() |
6 май 14, 15:29 [15980591] Ответить | Цитировать Сообщить модератору |
garvy Member Откуда: Москва Сообщений: 799 |
Дык на сколько я понимаю COUNT(*) возвращает число строк в запросе - должно быть 1 а не 2 - вот это не понятно |
6 май 14, 15:46 [15980757] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Вы неправильно понимаете |
||
6 май 14, 15:46 [15980767] Ответить | Цитировать Сообщить модератору |
garvy Member Откуда: Москва Сообщений: 799 |
Да, не понимаю. Надо разобраться. Вот определение из BOL " Возвращает количество элементов в группе.... Функция COUNT(*) возвращает количество строк в указанной таблице, не отбрасывая дублированные строки. Подсчитывает каждую строку отдельно. При этом учитываются и строки, содержащие значения NULL".В моем случае 1 элемент - это собственно сгруппированная строка данных. Что такое этот 2-й элемент? |
7 май 14, 09:24 [15983668] Ответить | Цитировать Сообщить модератору |
garvy Member Откуда: Москва Сообщений: 799 |
Получается, что "возвращает .. в указанной таблице" следует понимать буквально? И тогда действительно - в исходной таблице 2 строки. Тогда здесь нарушение какое-то общей логики, к которой привык в SQL: что-то там делается над данными, после чего имеем выход чего-нибудь с учетом уже переработанных данных. В данном случае COUNT(*) пилюет на наличие GROUP BY? |
7 май 14, 09:29 [15983686] Ответить | Цитировать Сообщить модератору |
Knyazev Alexey Member Откуда: Екб -> Мск Сообщений: 10234 Блог |
declare @t table ( a char ) insert into @t values ('a'),('a'),('a'),('b'),('b') select a, count(*) cnt from @t group by a /* a cnt ---- ----------- a 3 b 2 */ |
7 май 14, 09:31 [15983695] Ответить | Цитировать Сообщить модератору |
prog882
Guest |
garvy, SELECT COUNT(*) FROM ( SELECT [№товара], Nтпд, Ед, [№заказчика], [Площадка], Габариты FROM [Служебная] GROUP BY [№товара], Nтпд, Ед, [№заказчика], [Площадка], Габариты ) T |
7 май 14, 09:39 [15983726] Ответить | Цитировать Сообщить модератору |
garvy Member Откуда: Москва Сообщений: 799 |
Да, теперь разобрался. Спасибо всем. Хотя если честно - большое откровение для меня! С языком SQL знаком и плотно сотрудничаю уже лет 15 как! Вот так: век живи - век учись. |
7 май 14, 09:45 [15983761] Ответить | Цитировать Сообщить модератору |
Knyazev Alexey Member Откуда: Екб -> Мск Сообщений: 10234 Блог |
это в самых первых главах самых простеньких учебниках по любому SQL...основы так сказать... |
||
7 май 14, 09:57 [15983820] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8317 |
Существует даже такая штука как count(distinct field1). |
7 май 14, 12:01 [15984614] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |