Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / CrossTab не работает / 25 сообщений из 25, страница 1 из 1
08.04.2003, 13:08
    #32135693
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossTab не работает
Делаю CrossTab Query. Пока сидит на одной таблице - все OK. А мне надо заменить Column Heading - показывать не код из этой таблицы, а соответствующий ему текст. Для этого добавляю вторую таблицу (маленькая табличка, 6 строчек, 2 поля), делаю Join, добавляю поле (причем как GroupBy, ибо другие варианты оно не принимает), переношу к нему Column Heading... И оно и группировку по строкам делать перестает, и столбцы начинает сортировать не по коду, как у меня указано, а по тексту, который показан в заголовке. Что интересно - если поменять местами Column Heading и Row Heading, то работает, но мне так не годится.
...
Рейтинг: 0 / 0
08.04.2003, 13:55
    #32135768
наутилус
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossTab не работает
странно. а заново создать?.. у меня нормально таки есвязи проходили
...
Рейтинг: 0 / 0
08.04.2003, 13:56
    #32135773
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossTab не работает
А заново создать - я и создаю заново... Может, где-то ключа не хватает...
...
Рейтинг: 0 / 0
12.12.2003, 02:02
    #32351262
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossTab не работает
Опять сталкиваюсь с тем же самым. Вот тестовый пример.

Таблица t1:

Код: plaintext
1.
2.
3.
4.
5.
k1 k2 d
 1    1   один один
 1    2   один два
 2    1   два один
 2    2   два два

Таблица t2:

Код: plaintext
1.
2.
3.
k2 t
 1   единица
 2   двойка

Запрос:

TRANSFORM First(t1.d) AS FirstOfd
SELECT t1.k1
FROM t1 INNER JOIN t2 ON t1.k2 = t2.k2
GROUP BY t1.k1
PIVOT t2.t;

Результат запроса:

Код: plaintext
1.
2.
3.
k1 двойка   единица
 1   один два один один
 2   два два  два один

Пока все хорошо. А теперь я хочу упорядочить столбцы этого результата:

TRANSFORM First(t1.d) AS FirstOfd
SELECT t1.k1
FROM t1 INNER JOIN t2 ON t1.k2 = t2.k2
GROUP BY t1.k1, t1.k2
ORDER BY t1.k2
PIVOT t2.t;

И вместо упорядоченных столбцов
выходит запрос, мало похожий на перекрестный:

Код: plaintext
1.
2.
3.
4.
5.
k1 двойка   единица
 1            один один
 2            два один
 1   один два	
 2   два два

При этом если строить запрос только на первой таблице:

TRANSFORM First(t1.d) AS FirstOfd
SELECT t1.k1
FROM t1
GROUP BY t1.k1
ORDER BY t1.k2
PIVOT t1.k2;

- то сортировка столбцов работает нормально:

Код: plaintext
1.
2.
3.
k1  1           2 
 1   один один один два
 2   два один  два два
...
Рейтинг: 0 / 0
12.12.2003, 06:23
    #32351268
iska
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossTab не работает
Так подойдет? (Acc 02)

TRANSFORM First(t3.d) AS FirstOfd
SELECT t3.k1
FROM [SELECT t1.k1, t2.t, t1.d
FROM t1 INNER JOIN t2 ON t1.k2 = t2.k2]. AS t3
GROUP BY t3.k1
ORDER BY t3.t DESC
PIVOT t3.t;
...
Рейтинг: 0 / 0
12.12.2003, 12:36
    #32351381
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossTab не работает
> А теперь я хочу упорядочить столбцы этого результата:

TRANSFORM First(t1.d) AS FirstOfd
SELECT t1.k1
FROM t1 INNER JOIN t2 ON t1.k2 = t2.k2
GROUP BY t1.k1, t1.k2
ORDER BY t1.k2
PIVOT t2.t;

Ключевое слово именно group by t1.k2. Если запрос чуть переделать, то станет понятно, почему он дает такой результат:

TRANSFORM First(t1.d) AS FirstOfd
SELECT t1.k1, t1.k2
FROM t1 INNER JOIN t2 ON t1.k2 = t2.k2
GROUP BY t1.k1, t1.k2
ORDER BY t1.k2
PIVOT t2.t;

Можно отсортировать столбцы, но только по алфавиту. Гетц (в "Решениях") в таких случаях рекомендует задавать фиксированные заголовки столбцов.
...
Рейтинг: 0 / 0
12.12.2003, 13:14
    #32351403
iska
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossTab не работает
Ой, елки, наворотил с утра с вложенным запросом ...
Беру свои слова обратно.

Согласен с Geo и Гетцем :-) Но для данной задачи все ведь решаемо и без
PIVOT ... IN (...)
Просто предлагается упорядочить в данном случае по полю t

TRANSFORM First(t1.d) AS FirstOfd
SELECT t1.k1
FROM t1 INNER JOIN t2 ON t1.k2 = t2.k2
GROUP BY t1.k1
ORDER BY t2.t DESC
PIVOT t2.t;
...
Рейтинг: 0 / 0
12.12.2003, 13:20
    #32351408
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossTab не работает
GeoГетц
Имя нарицательное (муж). Объект, нарицаемый этим именем должен выдвать решения проблем не хуже чем Geo & Гетц.
...
Рейтинг: 0 / 0
12.12.2003, 13:26
    #32351411
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossTab не работает
2Темный
Прекращай. :) Иди на водопой што-ли сходи, полегче будет, цепляться к людям не будешь :))

2iska
ORDER BY t2.t DESC
Опять же, ты предлагаешь сортировать по алфавиту. Это хорошо, пока мы до цифры 3 не дойдем. После этого столбцы будут сортироваться так:

четверка
тройка
пятерка
единица
двойка
...
Рейтинг: 0 / 0
12.12.2003, 13:29
    #32351415
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossTab не работает
Ну ладно-ладно. Счас еще пива принесуть. Я буду совсем злой и страшный телепут. Буду отвечать на незаданные вопросы.
...
Рейтинг: 0 / 0
12.12.2003, 14:20
    #32351456
iska
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossTab не работает
2Geo:

Дык я согласен, но ведь iskaдля данной задачи

а про тройки и четверки Владимир Саныч ничего не сказал :-)
...
Рейтинг: 0 / 0
12.12.2003, 18:48
    #32351604
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossTab не работает
А вот и я пришел. Уууууу! Щас отвечать буду.

Во-первых, спасибо всем. Во-вторых, я все равно ничего не понимаю.

2 Geo:
Почему он так сортирует - это понятно. Понятно, что он думает, что я хочу сортировать строки. Но что делать-то?

2 iska:
Возражение про тройки и четверки - это то, что я хотел возразить сам. Это ведь всего лишь тестовый пример. А в действительности этих столбцов будет штук 10-20, и я хочу видеть их именно в нужном порядке и именно с нужными заголовками.
...
Рейтинг: 0 / 0
12.12.2003, 18:58
    #32351611
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossTab не работает
2BC
> Почему он так сортирует - это понятно. Понятно, что он думает, что я хочу сортировать строки. Но что делать-то?

А ничего. Я обычно делаю заголовки столбцов в виде

001/002/003...
или
yyyy-mm-dd

И сортирую по ним.

А уж потом в форме или отчете программно заменяю эти названия на удобочитаемые. Лучше способа не знаю.
...
Рейтинг: 0 / 0
12.12.2003, 19:06
    #32351617
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossTab не работает
Geo, даю пример. (Не из моей задачки, но ситуация совершенно аналогичная.)

1 - Новогиреево
2 - Перово
3 - Шоссе Энтузиастов
4 - Авиамоторная
5 - Площадь Ильича
6 - Марксистская
7 - Третьяковская

В таблице сидят коды от 1 до 7 (разумеется). А в заголовках столбцов я хочу показать названия (разумеется) и в нужном порядке (разумеется). Какое из моих требований можно назвать излишней роскошью?
...
Рейтинг: 0 / 0
12.12.2003, 19:11
    #32351623
Serafim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossTab не работает
по поводу сортировки - когда нам по месяцям надо было разложить, то мы в начало закидывали нужное кол-во пробелов (от 1 до 12) при именах Jan,Feb... и все очень даже хорошо...
...
Рейтинг: 0 / 0
12.12.2003, 19:16
    #32351626
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossTab не работает
Извращенцы поневоле... :^)
...
Рейтинг: 0 / 0
12.12.2003, 19:25
    #32351633
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossTab не работает
2ВС
Про пример со ст. метро.

Я в подобных случаях делаю так (м., есть способ лучше, но я его не знаю)
1. В заголовке столбцов ставлю Format(idStation,"000"), где количество нулей больше или равно максимальному (максимально возможному) количеству цифр в коде станции.
2. Запрос я пользователю не открываю "как есть", естественно, а посредством предназначенной для этого формы, списка или т.п. Хотя это и не важно. При открытии формы (или после установки условий для перекрестного запроса) я могу получить его содержимое, в т.ч. названия столбцов в виде "001", "002" и т.д.
3. Один из способов, программно формировать запрос из перекрестного:
select ..., MyTransformQuery.001 as [Новогиреево], ...
Другой способ, для формы, программно можно поменять содержимое меток, привязанных к полям:
for t=2 to rsSource.Fields.Count
rsStationDictionary.findfirst "idStation=" & clng(rsSource.field(t).name)
me.label1.caption = rsStationDictionary.field("StationName")
me.Control1.ControlSource = rsSource.field(t).name
next t

Примерно так.
Т.е. нужную сортировку делать в запросе с учетом того, что она м.б. только в алфавитном порядке. Надо по кодам - значит в заголовках д.б. именно коды.
А перед отображением пользователю приходится при необходимости "подменять" названия на нужные.
...
Рейтинг: 0 / 0
12.12.2003, 19:28
    #32351634
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossTab не работает
Все понял. Весь мир бардак. Спасибо Geo и Serafim'у. По крайней мере теперь знаю, что это не у меня глюк...
...
Рейтинг: 0 / 0
12.12.2003, 19:47
    #32351649
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossTab не работает
Саныч, это не глюк , это фича :) Вообще то как раз для таких целей в инструкции Pivot предусмотрен предикат IN
Код: plaintext
PIVOT t1.k2 IN ( "One" , "Two" , "Three" , "Four" , "Five" )
...
Рейтинг: 0 / 0
12.12.2003, 20:05
    #32351662
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossTab не работает
2 VIG:

Памятуя о Мартышке и Очках, на всякий случай спрашиваю, на какую часть тела эту штуку нанизывают. Я ее добавил, ничего не изменилось.
...
Рейтинг: 0 / 0
12.12.2003, 20:43
    #32351693
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossTab не работает
Саныч, это немного переделанный твой пример
TRANSFORM max(t1.descr) AS FirstOfd

SELECT t1.k1
FROM table10 AS t1 INNER JOIN table11 AS t2 ON t1.k2 = t2.k
GROUP BY t1.k1
ORDER BY t1.k1
PIVOT t2.descr in ("two","three","one") ;
Код: plaintext
1.
2.
k1	two	    three	             one
 1 	one_two		             one_one
 2 	two_two	    two_three	   two_one


и как говорится , почувствуйте разницу
TRANSFORM max(t1.descr) AS FirstOfd
SELECT t1.k1
FROM table10 AS t1 INNER JOIN table11 AS t2 ON t1.k2 = t2.k
GROUP BY t1.k1
ORDER BY t1.k1
PIVOT t2.descr in ("three","two","one") ;

Код: plaintext
1.
2.
k1	three	     two	         one
 1 		     one_two	one_one
 2 	two_three    two_two	two_one
...
Рейтинг: 0 / 0
12.12.2003, 20:50
    #32351699
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossTab не работает
ЕСТЬ!!!!!!

VIG, спасибо! Вот работающий вариант для моего примера:

TRANSFORM First(t1.d) AS FirstOfd
SELECT t1.k1
FROM t1 INNER JOIN t2 ON t1.k2 = t2.k2
GROUP BY t1.k1
PIVOT t2.t in ("единица","двойка");

Код: plaintext
1.
2.
3.
k1 единица   двойка
 1   один один один два
 2   два один  два два
...
Рейтинг: 0 / 0
12.12.2003, 22:16
    #32351716
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossTab не работает
А ведь и Geo говорил то же самое... Спасибо once more!
...
Рейтинг: 0 / 0
12.12.2003, 22:29
    #32351718
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossTab не работает
:)
VIG сказал это куда лучше :)

Кроме того, это хорошо, когда количество столбцов известно заранее. И их названия. В некоторых случаях это, к сожалению, не поможет.
Например, если надо сделать табель работ за период.
...
Рейтинг: 0 / 0
12.12.2003, 22:39
    #32351720
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossTab не работает
Ну, таблица с кодами ведь конечна. Если это не 12 месяцев (которые постоянны), а станции метро (которые могут добавляться), то можно просто пройти программой по этой таблице, дописать динамически к селекту список колонок - и все.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / CrossTab не работает / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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