Добрый день!
Нужна помощь.
Есть xls-файл, в котором три таблицы.
Файл - load1.xls
Таблица 1 на листе 'kod' имеет такие столбики "Код", "Наименование", "ГРУППА", "БРЕНД"
Таблица 2 на листе 'ostatki' имеет такие столбики "Код", "остаток_январь", "остаток_февраль"
Таблица 3 на листе 'prodazi' имеет такие столбики "Код", "общие продажи за январь", "общие продажи за февраль"
Хочу вывести через запрос к OLEDB объединение этих трёх таблиц в StringTableMT.
Вывести нужно все строки из таблицы 1 и к ним подбросить строки из таблицы 2 и 3 под столбику "Код".
Как я понял для этих целей нужно использовать 2 раза LEFT OUTER JOIN, но в моем случае не получается произвести данный запрос. Запрос не выполняется.
Вот текст запроса
SELECT `kod$`.Код, `kod$`.Наименование, `kod$`.ГРУППА, `kod$`.БРЕНД, `ostatki$`.остаток_январь, `ostatki$`.остаток_февраль, `prodazi$`.`общие продажи за январь`, `prodazi$`.`общие продажи за февраль` FROM `D:\...\load1.xls`.`kod$` `kod$` LEFT OUTER JOIN `D:\...\load1.xls`.`ostatki$` `ostatki$` ON `kod$`.Код = `ostatki$`.Код LEFT OUTER JOIN `D:\...\load1.xls`.`prodazi$` `prodazi$` ON `kod$`.Код = `prodazi$`.Код
Если указываю 1 раз LEFT OUTER JOIN , то все работает.
А нужно в любом случае произвести объединение по 3 таблицам.
Подскажите, как решить данную проблему.
Заранее благодарен.
Этот топик читают: Гость
Ответов: 19
Рейтинг: 1
|
|||
карма: 0 |
|
Ответов: 824
Рейтинг: 138
|
|||
stygar писал(а): Заранее благодарен.http://fav-spb-auto.livejournal.com/19782.html Очень давно я хотел высказаться, а тут пошла прямо эпидемия. Возможно, много новичков появилось. Дорогие соконфетники, многие из вас, обращаясь с просьбой к сообществу, полагают что надо обязательно написать в конце: заранее спасибо, заранее благодарен и тп. И думают что это правильно и вежливо (я написал и сразу поблагодарил за помощь; какой я хороший!). Так вот я вынужден вас огорчить - во многих местах такая форма подписи, напротив, рассматривается как проявление неуважения к другим и даже в определённой степени как хамство. И я склонен согласиться с этим. Поясню почему. Надпись заранее благодарен, вообще говоря, свидетельствует об некоем принуждении к ответу. Дескать, я-то вас уже отблагодарил, а вы теперь давайте пошевеливайтесь с комментами. Вам нравится когда вас заставляют что-то делать? Верю, что большинство пишущих вовсе и не предполагает такой интерпретации, но это так . Далее. Вы кому высказываете преждевременную благодарность? Тому кто не ответит? Или кто напишет что вы неправы? Или может даже обидит вас, вольно или невольно? Зачем?! Если вы действительно получили полезный совет или помощь от сообщника(ов), то так и напишите лично ему(им) - спасибо за ваш отзыв, благодарю вас за помощь, ваш совет действительно мне помог и тп. Так вы по-настоящему проявите себя как вежливый и благодарный участник коммуны. И в следующий раз вам помогут с большей охотой. Думаю, особенно приятно будет, если вы отдельным коротким постом напишете как решили свой вопрос и выскажете личную благодарность за оказанную помощь. Но это уж так... Друзья, не надо писать формальную отписку! Будьте взаимно вежливы, предупредительны и благодарны. Удачи на дорогах. А в Excel никак? Там есть замечательная функция "ВПР".... |
|||
карма: 1 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Без обид.
1. Желание: stygar писал(а): Хочу вывести через запрос к OLEDB объединение этих трёх таблиц в StringTableMT.sashaoli писал(а): А в Excel никак? Там есть замечательная функция "ВПР"....2. Желание sashaoli писал(а): Решил прикрутить к HiAsm 7 zip sashaoli, разницу в желаниях и ответах улавливаешь ? Я нет. Воистину : Очень старинная поговорка писал(а): Каждый дуреет по-своему.Меня больше напрягло название колонки "БРЕНД". ------------ Дoбавленo в 10.06: И про "Заранее благодарен" http://www.e-reading.ws/chapter.php/1009923/59/Korovina_-_4_shaga_k_bogatstvu,_ili_Hranite_dengi_v_myagkih_tapochkah.html Знаешь, работает. |
|||
карма: 25 |
| ||
Голосовали: | stygar |
Ответов: 824
Рейтинг: 138
|
|||
[flood]Tad, Гы , а помните, как меня носом в Access тыкали? Ну не лично Вы.
Так сказать - учусь... [/flood] Tad, поправьте меня, если я не прав. По моему, в задаче не нужно использовать LEFT OUTER JOIN, только правильно задать условие WHERE (`kod$`.Код = `prodazi$`.Код) and (`kod$`.Код = `ostatki`.Код) Кроме того, я бы переименовал поля таблиц - чтобы названия имели только латинские символы, желательно без пробелов. |
|||
карма: 1 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
sashaoli, никогда к Excel не пытался прикрутить HiAsm Там своих функций выше крыши.
В обыкновенной БД, поставленная задача решается примерно так:
------------ Дoбавленo в 11.22: sashaoli писал(а): Кроме того, я бы переименовал поля таблиц - чтобы названия имели только латинские символы, желательно без пробелов. |
|||
карма: 25 |
|
Ответов: 8928
Рейтинг: 823
|
|||
Tad писал(а): ..это Excel и названия колонок на русском.."Смесь французского с Нижегородским", а имя листов латынскими символами |
|||
карма: 19 |
| ||
Голосовали: | Tad |
Ответов: 824
Рейтинг: 138
|
|||
[flood]Tad, отчего вы так Excel не любите?
Вы как только слышите "Excel" - сразу приступ ненависти к нему. И к тому к спросил. Аж жуть берет. [/flood] Tad писал(а): В обыкновенной БД, поставленная задача решается примерно так: |
|||
карма: 1 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
sashaoli, [flood]Excel не баба. Любить или не любить - дело личное.
И где я сказал, что Excel я не люблю ? Наоборот считаю - Excel отличная программа с отличными возможностями. Не применяю - это да. Тут согласен. Нет у меня потребности в применении Excel. А не нравится мне не Excel, а когда, не изучив и не освоив всеx возможностей Excel, начинают лепить к нему "OLEDB и StringTableMT". Не нравится, когда вместо "Изготовитель" пишут "БРЕНД". Много чего не нравится. [/flood] |
|||
карма: 25 |
|
Ответов: 824
Рейтинг: 138
|
|||
[flood]
Tad писал(а): А не нравится мне не Excel, а когда, не изучив и не освоив всеx возможностей Excel, начинают лепить к нему "OLEDB и StringTableMT".Ну так ведь я тоже бы не сел изучать SQL, и разбирать коды IC, пока не начал лепить "зайцу стоп-сигнал". А начал лепить - начал читать, интересоваться, спрашивать. Т.е. обучение проходит в стиле типа игры... [/flood] stygar, если в запросе Вы намерены обращаться в ячейкам Excel, в которых формулы, то возможны проблемы с результатом запроса. А вообще - выложите ка Вашу книжечку Excel и через 1 - 1,5 час. я сделаю JOIN в самом Excel.(а может и раньше) ------------ Дoбавленo в 14.35: [flood]Гы, почемуто я слово "БРЕНД" читаю как "бред" [/flood] |
|||
карма: 1 |
|
Ответов: 19
Рейтинг: 1
|
|||
sashaoli
Надпись заранее благодарен, вообще говоря, свидетельствует об некоем принуждении к ответу. Дескать, я-то вас уже отблагодарил, а вы теперь давайте пошевеливайтесь с комментами., У каждого свое видение. Не ровняйте всех по себе. Я и на самом деле благодарен за любую наводку. А каждый сам для себя решает... sashaoli, А в Excel никак? Там есть замечательная функция "ВПР".... Понимаете в чем здесь нюанс. Я знаю Excel просто очень хорошо. И это не проблема, с помощью ВПР провести объединение таблиц. Здесь вопрос в другом - программа должна использовать три различных отчёта, которые должны ею объединяться и уже сама программа будет проводить по каждой товарной позиции определенные расчеты. Если бы я делал это для своего пользования (как это обычно бывает), то конечно же в экселе я это сделаю за 30 секунд. Но так как большинство людей эксель не знают, но инструмент нужно предоставить, то нужно дать именно программное решение. Так что про реализацию данной задачи средствами MS Excel можете не давать советов. Леонид "Смесь французского с Нижегородским", а имя листов латынскими символами , Разницы в названиях никакой. На запрос это не влияет. Разве что так удобней, как вы советуете. Спасибо. Tad SELECT Код,Наименование,ГРУППА,БРЕНД, (SELECT остаток_январь,остаток_февраль FROM ostatki WHERE oststki.код=код), (SELECT общие продажи за январь, общие продажи за февраль FROM prodazi WHERE prodazi.код=код) FROM kod; Попробую так как вы описали. Но представленный код запроса я брал из MS Query. Синатксис именно под запросы в Excel. Но возможно можно и так. Попробую. sashaoli, А вообще - выложите ка Вашу книжечку Excel и через 1 - 1,5 час. я сделаю JOIN в самом Excel.(а может и раньше) Вот ссылка на файл http://s-tigers.com.ua/load3.xls Столбики и листы переименованы по латыни, чтоб было удобней, как советовали. Важно, чтоб после объединения, выводился весь перечень позиций с листа Kod. ------------ Дoбавленo в 17.00: Tad, спасибо! Ваш совет по запросу оказался полезным. Получился такой код: SELECT `kod$`.Код, `kod$`.Наименование, `kod$`.ГРУППА, `kod$`.БРЕНД, (SELECT `ostatki$`.остаток_январь FROM `D:...load1.xls`.`ostatki$` `ostatki$` WHERE `kod$`.Код = `ostatki$`.Код) AS `Остатки в январе`, (SELECT `prodazi$`.`общие продажи за январь` FROM `D:...load1.xls`.`prodazi$` `prodazi$` WHERE `kod$`.Код = `prodazi$`.Код) AS `Продажи в январе`, (SELECT `ostatki$`.остаток_февраль FROM `D:...load1.xls`.`ostatki$` `ostatki$` WHERE `kod$`.Код = `ostatki$`.Код) AS `Остатки в феврале` FROM `D:...load1.xls`.`kod$` `kod$` |
|||
карма: 0 |
|
Ответов: 824
Рейтинг: 138
|
|||
stygar, Как пример в Excel
------------ Дoбавленo в 18.52: stygar, А почему нужно было делать на 3-х листах? ------------ Дoбавленo в 18.56: Только что до меня дошло! Это же "Товарный баланс" (было, продано, осталось) |
|||
карма: 1 |
|
Ответов: 8928
Рейтинг: 823
|
|||
sashaoli, прихода нет, уж Вам-то сразу в глаза должно броситься
|
|||
карма: 19 |
|
Ответов: 824
Рейтинг: 138
|
|||
Нам приход не показали
------------ Дoбавленo в 19.19: Почему нету прихода - причин может быть много: не производят больше, реализуют конфискат, фирме "кырдык" - распродажа, "так нада" ------------ Дoбавленo в 19.22: [flood]Усе, на седня ухожу. Нужно еще отчет по недрах в налоговою сдать...[/flood] |
|||
карма: 1 |
|
Ответов: 19
Рейтинг: 1
|
|||
sashaoli, спасибо за примеры в MS Excel
А вы можете подсказать следующее? Имея объединенные данные по движению товара, уже можно проводить множество расчетов по каждой позиции. Например, в самом Excel я без проблем для каждой позиции рассчитаю категорию по АВС-анализу, XYZ-анализу... и т.п. Дайте совет, как можно провести аналогичные расчеты в отдельном столбике StringTableMT расчеты по формулам, которые бы использовали значения из других столбцов? С помощью каких элементов можно провести дополнительные расчеты для всех строк в дополнительных столбиках? Может уже где-то эта тема поднималась? В примерах HiAsm не видел такого. Есть принципы использования элементов из раздела "Логика", но не видел примера с их применением в StringTableMT. |
|||
карма: 0 |
|
Ответов: 8928
Рейтинг: 823
|
|||
stygar, ещё не доделал сортировку по кодам, посмотрите, правильно-ли я Вас понял: mytablexcel.rar
(Хотя считаю, что Excel самодостаточна и прикручивать к ней свои программки излишне.) |
|||
карма: 19 |
| ||
файлы: 1 | mytablexcel.rar [3.9KB] [191] |