Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как "расправить" таблицу? / 12 сообщений из 12, страница 1 из 1
11.10.2003, 06:06
    #32290559
Miktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "расправить" таблицу?
Есть таблица Menu
IDDinner (Значение от 0 до 4 - 1-й Завтрак, 2-й и т.д.), IDDish (ссылка на справочник блюд) и DateMenu (ну понятно)
Как мне получить таблицу вида:
Код: plaintext
1.
2.
3.
4.
5.
6.
 1 -й завтрак |  2 -й завтрак | Обед | Полдник | Ужин
 ----------------------------------------------------
 
Блюдо1      | Блюдо1      | Блюдо1
Блюдо2      | Блюдо2      | Блюдо2
...         | Блюдо3

Ну и так далее. Идея я думаю понятна. Развернуть таблицу.

Заранее всем огроный сенькс.
...
Рейтинг: 0 / 0
11.10.2003, 09:04
    #32290570
Pavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "расправить" таблицу?
Ну так и строй перекрестный запрос. И adp или mdb? И если mdb, то таблицы родные или линкованные с SQL сервера?
...
Рейтинг: 0 / 0
11.10.2003, 12:47
    #32290589
Miktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "расправить" таблицу?
MDB. Таблицы родные. Но меня интересует именно запрос. т.к. вызываю его я из Delphi через ADO. Бьюсь уже дня три.
Запрос типа
Код: plaintext
1.
2.
3.
4.
SELECT M.DateMenu, D1.NameDish AS [ "1 -й Завтрак"], D2.NameDish AS [ "2 -й Завтрак"] и т.п.
FROM (Menu AS M 
LEFT JOIN KatDishes AS D1 ON (D1.IDDish=M.IDDish) AND (M.IDDinner= 0 )
LEFT JOIN KatDishes AS D2 ON (D2.IDDish=M.IDDish) AND (M.IDDinner= 1 )
и т.п.

работает, но выдает за все дни. Но стоит добавить
Код: plaintext
WHERE M.DateMenu=# 10 / 02 / 2003 #
Access виснет и вылетает грубо матерять и предлагая отослать все это домой (MS).
...
Рейтинг: 0 / 0
11.10.2003, 14:28
    #32290601
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "расправить" таблицу?
Это, однако, не есть синтаксис перекрестного запроса. Перекрестный не получается?
...
Рейтинг: 0 / 0
11.10.2003, 14:59
    #32290605
Miktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "расправить" таблицу?
Ну так просветите! Я ж для этого и пишу!
...
Рейтинг: 0 / 0
11.10.2003, 15:14
    #32290607
Miktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "расправить" таблицу?
Усе - разобрался :)) Огромный сенькс за намек. Просто я не Access'овец. Данные только там храню. Но после этого чудного визарда буду повнимательней.
...
Рейтинг: 0 / 0
11.10.2003, 15:19
    #32290609
Miktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "расправить" таблицу?
Упс... поторопился. В Аксцесе-то все Ок, а если выполнить полученный визардом запрос - галиматья выходит. Вот я и говорю - как мне SQL запрос написать, а не составить перекрестную таблицу визардом?
...
Рейтинг: 0 / 0
11.10.2003, 16:26
    #32290616
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "расправить" таблицу?
Что-то тут не то. Нет такого понятия - перекрестная таблица. Есть перекрестный запрос, и он, истессно, SQLевский. Так что с запросом все в порядке, это запрос, а не таблица. Но я не понял две вещи:

1. Что значит "в Аксессе все ОК", если запрос не удается выполнить?

2. В чем заключается галиматья?
...
Рейтинг: 0 / 0
11.10.2003, 23:02
    #32290667
Артист
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "расправить" таблицу?
1. Что значит "в Аксессе все ОК", если запрос не удается выполнить?
наверно в акесе у него этот запрос выполняется, а в delphi - хрен ...

встречное предложение: ты составил перекрестный запрос визардом акссеса, потом пуляеш его из дельфей... так вот запрос что ты пуляешь из дельфей - в студию ...
...
Рейтинг: 0 / 0
12.10.2003, 02:33
    #32290692
Miktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "расправить" таблицу?
В студию, так в студию.
Код: plaintext
1.
SELECT Menu.IDDinner, KatDishes.NameDish, KatDishes_1.NameDish, KatDishes_2.NameDish, KatDishes_3.NameDish, KatDishes_4.NameDish, Menu.DateMenu
FROM ((((KatDishes RIGHT JOIN Menu ON KatDishes.IDDish=Menu.IDDish) INNER JOIN KatDishes AS KatDishes_1 ON Menu.IDDish=KatDishes_1.IDDish) INNER JOIN KatDishes AS KatDishes_2 ON Menu.IDDish=KatDishes_2.IDDish) INNER JOIN KatDishes AS KatDishes_3 ON Menu.IDDish=KatDishes_3.IDDish) INNER JOIN KatDishes AS KatDishes_4 ON Menu.IDDish=KatDishes_4.IDDish;

Это то, что состряпал визард и если его выполнить (нажать (!)), то получиться не совсем (а точнее совсем не) то. Но если перейти в "Вид"-"Сводная таблица" - то что доктор прописал. Как понимать?
...
Рейтинг: 0 / 0
12.10.2003, 08:31
    #32290696
iska
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "расправить" таблицу?
Как уже говорили здесь, вам нужен полноценный перекрестный запрос ,
а не представление в виде сводной таблицы.

Я не совсем понял IDDinner - это внешний ключ на таблицу с описанием
ваших трапез (1-й завтрак и т.д.)?
Если это так, то допустим, названия ваших затраков-ужинов хранятся в
таблице MEAL (ID, MealDesc), связанной с MENU по MEAL.ID=MENU.IDDinner,
тогда вот вариант вашего запроса:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
TRANSFORM
  First(KATDISHES.NameDish) AS FirstOfDish
SELECT
  MENU.DateMenu
FROM
  KATDISHES INNER JOIN (MEAL INNER JOIN MENU ON MEAL.ID = MENU.IDDinner)
  ON KATDISHES.ID = MENU.IDDish
GROUP BY
  MENU.DateMenu
PIVOT
  MEAL.MealDesc 


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

В аксессе справка по перекрестным запросам есть, есть и примеры.

Удачи

ps: хе-хе, а тег [/src] TRANSFORM и PIVOT не раскрашивает, хотя форум и аксессовский :-)
...
Рейтинг: 0 / 0
12.10.2003, 11:33
    #32290711
Shkurenko Alexander
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "расправить" таблицу?
to Miktor
Посмотри
BOL Cross-Tab Reports,
здесь обычно смотрят в первую очередь ,
можно и здесь посмотреть ,
только для Jet'a поменяй конструкцию CASE ... WHEN на Iif(,,). Если разберешься, тогда любой перекрестный запрос по плечу!
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как "расправить" таблицу? / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]