Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите с запросом  [new]
unq
Member

Откуда:
Сообщений: 534
По всей видимости неправильно сконфигурил базу и теперь ломаю голову.
Есть таблица:

SessID PersonID PostID SDT EDT Pervoe Salat Garnir Osnovnoe
1142323 2009.08.21 8:00:00 2009.08.21 20:00:00 21121417
2173223 2009.08.21 8:00:00 2009.08.21 20:00:00 21121417
1142316 2009.08.21 8:00:00 2009.08.21 20:00:00 21121417
217322 2009.08.21 8:00:00 2009.08.21 20:00:00 21121417


Номера в колонках Pervoe, Salat Garnir, Osnovnoe это ID айтимов в другой таблице:

ItemID ItemName
12 Огурцы
14 Гречка
17 Гуляш
21 Борщ


А отчет нужен вида: (PostID это подразделение)

Подразделение блюдо Кол-во
Охрана Гречка 7
Охрана Гуляш 12
Охрана Борщ 5
Охрана Огурцы 10
Официанты Гречка 5

и т.д.

сколько каких атимов подразделение съело.
И вот второй день бьюсь и выходит все как то по кривому. Помогите плиз.
2 сен 09, 14:21    [7608355]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
так наверна
Guest
SELECT [в другой другой таблице].Post As Подразделение, [в другой таблице].ItemName As блюдо, COUNT(*) As [Кол-во]
(SELECT PostID, Pervoe As Food
 FROM [Есть таблица]
 UNION ALL
 SELECT PostID, Salat
 FROM [Есть таблица]
 UNION ALL
 SELECT PostID, Garnir
 FROM [Есть таблица]
 UNION ALL
 SELECT PostID, Osnovnoe
 FROM [Есть таблица]) a
INNER JOIN [в другой таблице]
  ON a.Food = [в другой таблице].ItemID 
INNER JOIN [в другой другой таблице]
  ON a.PostID = [в другой другой таблице].PostID 
GROUP BY [в другой другой таблице].Post, [в другой таблице].ItemName
2 сен 09, 14:46    [7608554]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
непонятно в каком поле храниться количесвто сьеденого???
типа подразделение,салат,дата,количество ? в основной етого вроде нет....
-------------------------------------
Jedem Das Seine
2 сен 09, 15:14    [7608769]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
Maxx
непонятно в каком поле храниться количесвто сьеденого???
типа подразделение,салат,дата,количество ? в основной етого вроде нет....
-------------------------------------
Jedem Das Seine

я думаю, что если указано, значит съел порцию..
2 сен 09, 15:19    [7608798]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Алексей2003,

чего? там все 4 идентификатора указаны вроде ? Или комплексный опет и неипет ? :)
2 сен 09, 15:22    [7608821]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
unq
Member

Откуда:
Сообщений: 534
так наверна,
Вроде работает.
Можно разяснить немножко что зачем:

что такое UNION ALL
потом Count(Колонка) понятно но что такое Count(*)

Точнее давайте расскажу логику как я понимаю как это работает а вы меня поправите если что не так.

Вобщем делаем селект из селекта.
Подзапрос выбирает подразделение и например салат
потом подразделение и гречка
а union all объединяет все подселекты в одну таблицу ? наверное...)
из которой потом мы делаем опять селект уже с джоинами в другие и другие другие таблицы. И групируем сначала по подразделению а потом по блюду.
Но вот как count(*) считает количество каждого блюда так и не пойму.((
2 сен 09, 15:27    [7608865]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
unq
Но вот как count(*) считает количество каждого блюда так и не пойму.((
Любой COUNT считает не количество блюд, а количество строк, получившихся в запросе!
2 сен 09, 15:43    [7608988]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
unq
Member

Откуда:
Сообщений: 534
iap
unq
Но вот как count(*) считает количество каждого блюда так и не пойму.((
Любой COUNT считает не количество блюд, а количество строк, получившихся в запросе!


тогда должно было получится

Блюдо кол-во
огурцы 17
гуляш 17
пюре 17
помидоры 17


но он считает не тупо все подряд а так:

Блюдо кол-во
огурцы 5
гуляш 7
пюре 3
помидоры 2
2 сен 09, 15:53    [7609034]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
unq
iap
unq
Но вот как count(*) считает количество каждого блюда так и не пойму.((
Любой COUNT считает не количество блюд, а количество строк, получившихся в запросе!


тогда должно было получится

Блюдо кол-во
огурцы 17
гуляш 17
пюре 17
помидоры 17


но он считает не тупо все подряд а так:

Блюдо кол-во
огурцы 5
гуляш 7
пюре 3
помидоры 2
А GROUP BY на что?

Гораздо эффективнее было бы сначала ознакомиться с документацией
SELECT (Transact-SQL)
Только это ссылка на SQL2008. В предыдущих версиях не все возможности были доступны.
Там есть ссылка на SQL2005.
2 сен 09, 16:03    [7609100]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить