|
|
|
CrossTab не работает
|
|||
|---|---|---|---|
|
#18+
Делаю CrossTab Query. Пока сидит на одной таблице - все OK. А мне надо заменить Column Heading - показывать не код из этой таблицы, а соответствующий ему текст. Для этого добавляю вторую таблицу (маленькая табличка, 6 строчек, 2 поля), делаю Join, добавляю поле (причем как GroupBy, ибо другие варианты оно не принимает), переношу к нему Column Heading... И оно и группировку по строкам делать перестает, и столбцы начинает сортировать не по коду, как у меня указано, а по тексту, который показан в заголовке. Что интересно - если поменять местами Column Heading и Row Heading, то работает, но мне так не годится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2003, 13:08 |
|
||
|
CrossTab не работает
|
|||
|---|---|---|---|
|
#18+
странно. а заново создать?.. у меня нормально таки есвязи проходили ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2003, 13:55 |
|
||
|
CrossTab не работает
|
|||
|---|---|---|---|
|
#18+
А заново создать - я и создаю заново... Может, где-то ключа не хватает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2003, 13:56 |
|
||
|
CrossTab не работает
|
|||
|---|---|---|---|
|
#18+
Опять сталкиваюсь с тем же самым. Вот тестовый пример. Таблица t1: Код: plaintext 1. 2. 3. 4. 5. Таблица t2: Код: plaintext 1. 2. 3. Запрос: 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. Пока все хорошо. А теперь я хочу упорядочить столбцы этого результата: 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. При этом если строить запрос только на первой таблице: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 02:02 |
|
||
|
CrossTab не работает
|
|||
|---|---|---|---|
|
#18+
Так подойдет? (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; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 06:23 |
|
||
|
CrossTab не работает
|
|||
|---|---|---|---|
|
#18+
> А теперь я хочу упорядочить столбцы этого результата: 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; Можно отсортировать столбцы, но только по алфавиту. Гетц (в "Решениях") в таких случаях рекомендует задавать фиксированные заголовки столбцов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 12:36 |
|
||
|
CrossTab не работает
|
|||
|---|---|---|---|
|
#18+
Ой, елки, наворотил с утра с вложенным запросом ... Беру свои слова обратно. Согласен с 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; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 13:14 |
|
||
|
CrossTab не работает
|
|||
|---|---|---|---|
|
#18+
GeoГетц Имя нарицательное (муж). Объект, нарицаемый этим именем должен выдвать решения проблем не хуже чем Geo & Гетц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 13:20 |
|
||
|
CrossTab не работает
|
|||
|---|---|---|---|
|
#18+
2Темный Прекращай. :) Иди на водопой што-ли сходи, полегче будет, цепляться к людям не будешь :)) 2iska ORDER BY t2.t DESC Опять же, ты предлагаешь сортировать по алфавиту. Это хорошо, пока мы до цифры 3 не дойдем. После этого столбцы будут сортироваться так: четверка тройка пятерка единица двойка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 13:26 |
|
||
|
CrossTab не работает
|
|||
|---|---|---|---|
|
#18+
Ну ладно-ладно. Счас еще пива принесуть. Я буду совсем злой и страшный телепут. Буду отвечать на незаданные вопросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 13:29 |
|
||
|
CrossTab не работает
|
|||
|---|---|---|---|
|
#18+
2Geo: Дык я согласен, но ведь iskaдля данной задачи а про тройки и четверки Владимир Саныч ничего не сказал :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 14:20 |
|
||
|
CrossTab не работает
|
|||
|---|---|---|---|
|
#18+
А вот и я пришел. Уууууу! Щас отвечать буду. Во-первых, спасибо всем. Во-вторых, я все равно ничего не понимаю. 2 Geo: Почему он так сортирует - это понятно. Понятно, что он думает, что я хочу сортировать строки. Но что делать-то? 2 iska: Возражение про тройки и четверки - это то, что я хотел возразить сам. Это ведь всего лишь тестовый пример. А в действительности этих столбцов будет штук 10-20, и я хочу видеть их именно в нужном порядке и именно с нужными заголовками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 18:48 |
|
||
|
CrossTab не работает
|
|||
|---|---|---|---|
|
#18+
2BC > Почему он так сортирует - это понятно. Понятно, что он думает, что я хочу сортировать строки. Но что делать-то? А ничего. Я обычно делаю заголовки столбцов в виде 001/002/003... или yyyy-mm-dd И сортирую по ним. А уж потом в форме или отчете программно заменяю эти названия на удобочитаемые. Лучше способа не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 18:58 |
|
||
|
CrossTab не работает
|
|||
|---|---|---|---|
|
#18+
Geo, даю пример. (Не из моей задачки, но ситуация совершенно аналогичная.) 1 - Новогиреево 2 - Перово 3 - Шоссе Энтузиастов 4 - Авиамоторная 5 - Площадь Ильича 6 - Марксистская 7 - Третьяковская В таблице сидят коды от 1 до 7 (разумеется). А в заголовках столбцов я хочу показать названия (разумеется) и в нужном порядке (разумеется). Какое из моих требований можно назвать излишней роскошью? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 19:06 |
|
||
|
CrossTab не работает
|
|||
|---|---|---|---|
|
#18+
по поводу сортировки - когда нам по месяцям надо было разложить, то мы в начало закидывали нужное кол-во пробелов (от 1 до 12) при именах Jan,Feb... и все очень даже хорошо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 19:11 |
|
||
|
CrossTab не работает
|
|||
|---|---|---|---|
|
#18+
Извращенцы поневоле... :^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 19:16 |
|
||
|
CrossTab не работает
|
|||
|---|---|---|---|
|
#18+
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 Примерно так. Т.е. нужную сортировку делать в запросе с учетом того, что она м.б. только в алфавитном порядке. Надо по кодам - значит в заголовках д.б. именно коды. А перед отображением пользователю приходится при необходимости "подменять" названия на нужные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 19:25 |
|
||
|
CrossTab не работает
|
|||
|---|---|---|---|
|
#18+
Все понял. Весь мир бардак. Спасибо Geo и Serafim'у. По крайней мере теперь знаю, что это не у меня глюк... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 19:28 |
|
||
|
CrossTab не работает
|
|||
|---|---|---|---|
|
#18+
Саныч, это не глюк , это фича :) Вообще то как раз для таких целей в инструкции Pivot предусмотрен предикат IN Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 19:47 |
|
||
|
CrossTab не работает
|
|||
|---|---|---|---|
|
#18+
2 VIG: Памятуя о Мартышке и Очках, на всякий случай спрашиваю, на какую часть тела эту штуку нанизывают. Я ее добавил, ничего не изменилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 20:05 |
|
||
|
CrossTab не работает
|
|||
|---|---|---|---|
|
#18+
Саныч, это немного переделанный твой пример 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. и как говорится , почувствуйте разницу 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 20:43 |
|
||
|
CrossTab не работает
|
|||
|---|---|---|---|
|
#18+
ЕСТЬ!!!!!! 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 20:50 |
|
||
|
CrossTab не работает
|
|||
|---|---|---|---|
|
#18+
А ведь и Geo говорил то же самое... Спасибо once more! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 22:16 |
|
||
|
CrossTab не работает
|
|||
|---|---|---|---|
|
#18+
:) VIG сказал это куда лучше :) Кроме того, это хорошо, когда количество столбцов известно заранее. И их названия. В некоторых случаях это, к сожалению, не поможет. Например, если надо сделать табель работ за период. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 22:29 |
|
||
|
CrossTab не работает
|
|||
|---|---|---|---|
|
#18+
Ну, таблица с кодами ведь конечна. Если это не 12 месяцев (которые постоянны), а станции метро (которые могут добавляться), то можно просто пройти программой по этой таблице, дописать динамически к селекту список колонок - и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2003, 22:39 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32351716&tid=1677690]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
165ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 452ms |

| 0 / 0 |
