powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как "расправить" таблицу?
12 сообщений из 12, страница 1 из 1
Как "расправить" таблицу?
    #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
Как "расправить" таблицу?
    #32290570
Фотография Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так и строй перекрестный запрос. И adp или mdb? И если mdb, то таблицы родные или линкованные с SQL сервера?
...
Рейтинг: 0 / 0
Как "расправить" таблицу?
    #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
Как "расправить" таблицу?
    #32290601
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Это, однако, не есть синтаксис перекрестного запроса. Перекрестный не получается?
...
Рейтинг: 0 / 0
Как "расправить" таблицу?
    #32290605
Фотография Miktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так просветите! Я ж для этого и пишу!
...
Рейтинг: 0 / 0
Как "расправить" таблицу?
    #32290607
Фотография Miktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Усе - разобрался :)) Огромный сенькс за намек. Просто я не Access'овец. Данные только там храню. Но после этого чудного визарда буду повнимательней.
...
Рейтинг: 0 / 0
Как "расправить" таблицу?
    #32290609
Фотография Miktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упс... поторопился. В Аксцесе-то все Ок, а если выполнить полученный визардом запрос - галиматья выходит. Вот я и говорю - как мне SQL запрос написать, а не составить перекрестную таблицу визардом?
...
Рейтинг: 0 / 0
Как "расправить" таблицу?
    #32290616
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Что-то тут не то. Нет такого понятия - перекрестная таблица. Есть перекрестный запрос, и он, истессно, SQLевский. Так что с запросом все в порядке, это запрос, а не таблица. Но я не понял две вещи:

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

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

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


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