Я пытаюсь создать формулу имени группы, используя запись из строки таблицы, отличной от строки, с которой связаны записи, содержащиеся в этой группе.
Во-первых, в моих данных есть слово группа, поэтому, чтобы избежать путаницы, я выделил его курсивом, чтобы отличать его от групп в Crystal Reports.
Моя таблица, из которой я извлекаю записи для этого имени группы, имеет:
- {GroupSection.Group} Группы элементов в нашей базе данных инвентаря
- Разделы {GroupSection.Section} (это как подгруппы, вложенные в каждую группу инвентаря).
- {GroupSection.Description} Проблемы начинаются здесь, потому что здесь хранятся описания для {GroupSection.Group} и {GroupSection.Section}.
Это образец моей таблицы:
{GroupSection.Group} {GroupSection.Section} {GroupSection.Description}
3.00 0.00 PRECAST CONCRETE PRODUCT
3.00 50.00 MISC PRECAST CONCRETE PRODUCT
3.00 99.00 *Z* MISC PRECAST CONCRETE PRODUC
4.00 0.00 CEMENT SUPPLIES
4.00 50.00 MISC CEMENT SUPPLIES
4.00 99.00 *Z* MISC CEMENT SUPPLIES
Первая и четвертая строки в этой таблице являются описаниями для {GroupSection.Group} (у них есть 0,00 в строке {GroupSection.Section}), а остальные — описания для {GroupSection.Section}. Фактические данные, содержащиеся в этом отчете, находятся в другой таблице и имеют те же два поля, что и первые два в этой таблице, но не третье поле, поэтому необходимо ссылаться на эту таблицу и использовать ее для создания описаний. названия групп. В другой таблице нет записей, ссылающихся на строки с 0.00.
Я хочу, чтобы мое дерево групп выглядело так:
3. PRECAST CONCRETE PRODUCT
50 MISC PRECAST CONCRETE
99 *Z* MISC PRECAST CONCRETE
4. CEMENT SUPPLIES
50 MISC CEMENT SUPPLIES
99 *Z* MISC CEMENT SUPPLIES
Это ошибочная формула, которую я сейчас использую в формуле имени группы для верхней группы:
ToText (left(Cstr({GroupSection.Group}),2))+ " " + ToText (If {GroupSection.Section} <> 0 then {GroupSection.Description} Else " ")
Это формула имени группы для внутренней вложенной группы (работает нормально):
ToText (left(Cstr({GroupSection.Section}),2))+ " " + ToText ({GroupSection.Description})
Вот как сейчас выглядит мое дерево групп:
3. MISC PRECAST CONCRETE
50 MISC PRECAST CONCRETE
99 *Z* MISC PRECAST CONCRETE
4. MISC CEMENT SUPPLIES
50 MISC CEMENT SUPPLIES
99 *Z* MISC CEMENT SUPPLIES
Как видите, мне нужно получить имя внешней группы из первой строки таблицы, даже если оно связывает записи, находящиеся в группе, со второй и третьей строками таблицы. Есть смысл?
Я пробовал использовать в формуле предыдущую(), но выдает следующую ошибку: Эту функцию нельзя использовать, поскольку ее нужно вычислить позже.
Изменить: я также просто попытался снова добавить ту же таблицу и связать ее один раз с группой и один раз с разделом, и это сработало для имен групп, но теперь у меня 1.9 миллион записей, что-то действительно дублируется. Так что это не сработает, если я не придумаю, как исправить несколько записей.
"." в описании имени группы это несвязанная проблема. Лучшее, что я могу сделать, это заставить 3,00 отображаться как 3, а 50,00 — как 50.
Спасибо за любую помощь!
Изменить 30 декабря 2013 г. для пользователя @Promethean:
Извините, я новичок в таблицах команд SQL. Я взял командную таблицу из другого отчета и внес в нее некоторые изменения. Вот как далеко я продвинулся:
SELECT
"GroupSection"."Group",
"GroupSection"."Section",
"GroupSection"."Description"
FROM ("SpruceDotNet"."dbo"."InventoryCommon" "InventoryCommon" with (nolock)
INNER JOIN
"SpruceDotNet"."dbo"."GroupSection" "GroupSection" with (nolock)
ON "InventoryCommon"."Group"="GroupSection"."Group")
WHERE
"GroupSection"."Section"=0
ORDER BY
"InventoryCommon"."Group"
Есть ли шанс, что вы могли бы использовать эту информацию, чтобы изменить свою таблицу команд, чтобы такой болван, как я, мог следовать за ней? Похоже, вы добавляете одно из полей дважды, но я не слежу за всем.
И тогда как бы вы присоединили таблицу команд к большей таблице, которая содержит более подробную информацию? Мне нужно было бы использовать правильный тип соединения, чтобы я не дублировал записи?
Любая помощь приветствуется.