Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];

Вниз

Конструирование SQL-запроса   Найти похожие ветки 

 
Юрий БК   (2003-06-11 05:17) [0]

Имеется Paradox-таблица такого формата:

VidDoc: String[4],
DocNo : String[12],
S : Double,
Owner : Integer,
Child : Integer и куча других полей.

Записи в таблице образуют группы, связаные в линейный список посредством полей Owner и Child
Количество записей в списке может быть разным (1..5)
Значения в поле VidDoc в группе не совпадают, а номера документов (поле DocNo) - подобны,
т.е., если головная запись в группе имеет номер РТН-20, все остальные записи будут иметь
номера вида РТН-20.1, РТН-20.2 и т.д.

Вопрос - можно ли сформировать SQL-запрос для получения выборки следующего вида (версия для BDE):

VidDoc, DocNo, S1, S2, S3.. Sn, где

VidDoc, DocNo, S1 - значения соответствующих полей головной записи (VidDoc = "РТН")
S2,S3..Sn - поля S, соответственно второй, третьей и т.д. записи списка


 
Wowa-K   (2003-06-11 05:59) [1]

А between не помогает


 
ЮЮ   (2003-06-11 06:01) [2]

SELECT
main.VidDoc, main.DocNo, main.S S1, d1.S S1, d2.S S2, ... d5.S S5
FROM
Table main
LEFT JOIN Table d1 ON (main.ID = d1.Owner) AND (<поле-номер> = 1)
...
LEFT JOIN Table d5 ON (main.ID = d5.Owner) AND (<поле-номер> = 5)
WHERE main.VidDoc = "РТН"


 
ЮЮ   (2003-06-11 06:06) [3]

>связаные в линейный список посредством полей Owner и Child
поподробней можно? Или на примере


 
Юрий БК   (2003-06-12 05:30) [4]

Пояснение к вопросу - пример списка записей

ID VidDoc DocNo S Owner Child
1 РТН РТН-10 100 0 2
2 НЛГ РТН-10.1 20 1 3
3 НЛГ РТН-10.2 4 2 0
остальные записи в том же духе, т.е. Owner головной записи = 0
и Child последней записи = 0
Необходимо выбрать (в одну строку!) S из всех записей списка
Следующая строка - документ РТН-11 и т.д.
Спасибо.


 
Юрий БК   (2003-06-12 07:18) [5]

Дополнение 2

Запрос вида
SELECT
A1.VidDoc, A1.DocNo, A1.LSum S0, d1.LSum S1, d2.LSum S2, d3.LSum S3
FROM
Accounts A1
LEFT JOIN Accounts d1 ON (A1.ItemNo = d1.Owner)
LEFT JOIN Accounts d2 ON (A1.ItemNo = d2.Owner)
LEFT JOIN Accounts d3 ON (A1.ItemNo = d3.Owner)
WHERE A1.VidDoc = "РТН"

работает, но выдает ВСЕ возможные комбинации для полей S0,S1,S2,S3, всего 27 строк для каждого DocNo. Правильным (и необходимым) является только одна строка. Как отсеять все лишние? Distinct убирает ВСЕ строки (пустая выборка)
Спасибо


 
Соловьев   (2003-06-12 10:08) [6]


> Вопрос - можно ли сформировать SQL-запрос для получения
> выборки следующего вида (версия для BDE):
>
> VidDoc, DocNo, S1, S2, S3.. Sn, где
>
> VidDoc, DocNo, S1 - значения соответствующих полей головной
> записи (VidDoc = "РТН")
> S2,S3..Sn - поля S, соответственно второй, третьей и т.д.
> записи списка

нельзя это сделать на LocalSQL.


 
ЮЮ   (2003-06-16 04:42) [7]

>Соловьев © (12.06.03 10:08)
>нельзя это сделать на LocalSQL.

В общем случае, конечно нельзя, но когда "Количество записей в списке может быть разным (1..5)", почему нет ???

SELECT
A1.VidDoc, A1.DocNo, A1.LSum S0, d1.LSum S1, d2.LSum S2, d3.LSum S3
FROM
Accounts A1
LEFT JOIN Accounts d1 ON (d1.ID = A1.Child)
LEFT JOIN Accounts d2 ON (d2.ID = d1.Child)
LEFT JOIN Accounts d3 ON (d3.ID = d2.Child)
WHERE A1.VidDoc = "РТН"

Р.S. На мой взгляд, Owner - лишнее поле, т.к. вставка/удаление записи в табдицу требует корректировки и последующей и предыдущей записи. Связи ID <-> Child вполне для организации связного списка.


 
ЮЮ   (2003-06-17 03:17) [8]

Автор вопроса, очевидно поверил Соловьев © (12.06.03 10:08) :-(
На всякий случай, исправлюсь по части P.S. Я имел в виду, что для линейного списка достаточно связки ID - PriorID (т.е. в твоем случае Owner, а не Child, как я сказал ранее)


 
Соловьев   (2003-06-17 09:43) [9]


> ЮЮ © (17.06.03 03:17)

насколько я понимаю, требуется получить в одну(!!!) строчку S1,...,SN за ранее не известно сколько будет там N. Это сделать только на Local SQL нельзя, можно сделать это на SQL, но с помощью ХП.


 
ЮЮ   (2003-06-17 09:58) [10]

Юрий БК (11.06.03 05:17)
"Количество записей в списке может быть разным (1..5):


 
Соловьев   (2003-06-17 10:08) [11]


> Количество записей в списке может быть разным

если автора устраивает NULL в строках, то ЮЮ прав, можно и на Local SQL


 
MsGuns   (2003-06-17 13:21) [12]

Похлже, что и заголовки накладных (или чего там имеется в виду под "документами") и фактуру ввалили в одну таблицу или я не прав ? Если прав, то надо не искать способ как заставить стоять одноногий табурет, а быстренько приделывать ему остальные 3 или хотя бы 2 ноги (в смысле нормально спроектировать БД) ;)))



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
1-31179
Тимур
2003-06-27 17:56
2003.07.10
Перевод формулы


3-31124
AlexGreG
2003-06-18 08:27
2003.07.10
... Ах, какие деревья ! ...


1-31306
mox
2003-06-26 17:29
2003.07.10
Создание объектов


1-31301
Sergei Nevazhnyi
2003-06-25 18:03
2003.07.10
Работа с canvas в D7


1-31175
Серёга
2003-06-27 17:28
2003.07.10
Нужно ли





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский