Вверх ↑
Этот топик читают: Гость
Ответов: 19
Рейтинг: 1
#1: 2014-08-11 01:33:57 ЛС | профиль | цитата
Добрый день!

Нужна помощь.

Есть 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 таблицам.

Подскажите, как решить данную проблему.
Заранее благодарен.
карма: 0

0
Ответов: 824
Рейтинг: 138
#2: 2014-08-11 02:23:58 ЛС | профиль | цитата
stygar писал(а):
Заранее благодарен.
http://fav-spb-auto.livejournal.com/19782.html
Очень давно я хотел высказаться, а тут пошла прямо эпидемия. Возможно, много новичков появилось.

Дорогие соконфетники, многие из вас, обращаясь с просьбой к сообществу, полагают что надо обязательно написать в конце: заранее спасибо, заранее благодарен и тп. И думают что это правильно и вежливо (я написал и сразу поблагодарил за помощь; какой я хороший!). Так вот я вынужден вас огорчить - во многих местах такая форма подписи, напротив, рассматривается как проявление неуважения к другим и даже в определённой степени как хамство. И я склонен согласиться с этим. Поясню почему.

Надпись заранее благодарен, вообще говоря, свидетельствует об некоем принуждении к ответу. Дескать, я-то вас уже отблагодарил, а вы теперь давайте пошевеливайтесь с комментами. Вам нравится когда вас заставляют что-то делать? Верю, что большинство пишущих вовсе и не предполагает такой интерпретации, но это так .

Далее. Вы кому высказываете преждевременную благодарность? Тому кто не ответит? Или кто напишет что вы неправы? Или может даже обидит вас, вольно или невольно? Зачем?!

Если вы действительно получили полезный совет или помощь от сообщника(ов), то так и напишите лично ему(им) - спасибо за ваш отзыв, благодарю вас за помощь, ваш совет действительно мне помог и тп. Так вы по-настоящему проявите себя как вежливый и благодарный участник коммуны. И в следующий раз вам помогут с большей охотой. Думаю, особенно приятно будет, если вы отдельным коротким постом напишете как решили свой вопрос и выскажете личную благодарность за оказанную помощь. Но это уж так...

Друзья, не надо писать формальную отписку! Будьте взаимно вежливы, предупредительны и благодарны. Удачи на дорогах.

А в Excel никак? Там есть замечательная функция "ВПР"....

карма: 1

0
Ответов: 16884
Рейтинг: 1239
#3: 2014-08-11 10:06:08 ЛС | профиль | цитата
Без обид.
1. Желание:
stygar писал(а):
Хочу вывести через запрос к OLEDB объединение этих трёх таблиц в StringTableMT.
Ответ:
sashaoli писал(а):
А в Excel никак? Там есть замечательная функция "ВПР"....
=================================================================
2. Желание
sashaoli писал(а):
Решил прикрутить к HiAsm 7 zip
Ответ: Там есть замечательный 7-Zip File Manager.

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
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
1
Голосовали:stygar
Ответов: 824
Рейтинг: 138
#4: 2014-08-11 10:08:40 ЛС | профиль | цитата
[flood]Tad, Гы , а помните, как меня носом в Access тыкали? Ну не лично Вы.
Так сказать - учусь... [/flood]
Tad, поправьте меня, если я не прав.
По моему, в задаче не нужно использовать LEFT OUTER JOIN, только правильно задать условие WHERE (`kod$`.Код = `prodazi$`.Код) and (`kod$`.Код = `ostatki`.Код)
Кроме того, я бы переименовал поля таблиц - чтобы названия имели только латинские символы, желательно без пробелов.
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#5: 2014-08-11 11:22:34 ЛС | профиль | цитата
sashaoli, никогда к Excel не пытался прикрутить HiAsm Там своих функций выше крыши.
В обыкновенной БД, поставленная задача решается примерно так:
SELECT Код,Наименование,ГРУППА,БРЕНД,
(SELECT остаток_январь,остаток_февраль FROM ostatki WHERE oststki.код=код),
(SELECT общие продажи за январь, общие продажи за февраль FROM prodazi WHERE prodazi.код=код)
FROM kod;
Кстати JOIN отработает по такой же схеме запроса.

------------ Дoбавленo в 11.22:
sashaoli писал(а):
Кроме того, я бы переименовал поля таблиц - чтобы названия имели только латинские символы, желательно без пробелов.
Ну это Excel и названия колонок на русском.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 8928
Рейтинг: 823
#6: 2014-08-11 12:04:02 ЛС | профиль | цитата
Tad писал(а):
..это Excel и названия колонок на русском..

"Смесь французского с Нижегородским", а имя листов латынскими символами
карма: 19

1
Голосовали:Tad
Ответов: 824
Рейтинг: 138
#7: 2014-08-11 13:43:06 ЛС | профиль | цитата
[flood]Tad, отчего вы так Excel не любите?
Вы как только слышите "Excel" - сразу приступ ненависти к нему.
И к тому к спросил. Аж жуть берет.
[/flood]
Tad писал(а):
В обыкновенной БД, поставленная задача решается примерно так:
О, спасибо, что напомнили, а то начал забывать.

карма: 1

0
Ответов: 16884
Рейтинг: 1239
#8: 2014-08-11 14:06:16 ЛС | профиль | цитата
sashaoli, [flood]Excel не баба. Любить или не любить - дело личное.
И где я сказал, что Excel я не люблю ?
Наоборот считаю - Excel отличная программа с отличными возможностями.
Не применяю - это да. Тут согласен. Нет у меня потребности в применении Excel.
А не нравится мне не Excel, а когда, не изучив и не освоив всеx возможностей Excel, начинают лепить к нему "OLEDB и StringTableMT".
Не нравится, когда вместо "Изготовитель" пишут "БРЕНД".
Много чего не нравится.
[/flood]


карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 824
Рейтинг: 138
#9: 2014-08-11 14:35:25 ЛС | профиль | цитата
[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

0
Ответов: 19
Рейтинг: 1
#10: 2014-08-11 17:00:26 ЛС | профиль | цитата
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

0
Ответов: 824
Рейтинг: 138
#11: 2014-08-11 18:56:02 ЛС | профиль | цитата
stygar, Как пример в Excel
------------ Дoбавленo в 18.52:
stygar, А почему нужно было делать на 3-х листах?
------------ Дoбавленo в 18.56:
Только что до меня дошло! Это же "Товарный баланс" (было, продано, осталось)
карма: 1

0
Ответов: 8928
Рейтинг: 823
#12: 2014-08-11 19:03:38 ЛС | профиль | цитата
sashaoli, прихода нет, уж Вам-то сразу в глаза должно броситься
карма: 19

0
Ответов: 824
Рейтинг: 138
#13: 2014-08-11 19:22:52 ЛС | профиль | цитата
Нам приход не показали
------------ Дoбавленo в 19.19:
Почему нету прихода - причин может быть много: не производят больше, реализуют конфискат, фирме "кырдык" - распродажа, "так нада"
------------ Дoбавленo в 19.22:
[flood]Усе, на седня ухожу. Нужно еще отчет по недрах в налоговою сдать...[/flood]
карма: 1

0
Ответов: 19
Рейтинг: 1
#14: 2014-08-12 02:57:29 ЛС | профиль | цитата
sashaoli, спасибо за примеры в MS Excel

А вы можете подсказать следующее?
Имея объединенные данные по движению товара, уже можно проводить множество расчетов по каждой позиции. Например, в самом Excel я без проблем для каждой позиции рассчитаю категорию по АВС-анализу, XYZ-анализу... и т.п.

Дайте совет, как можно провести аналогичные расчеты в отдельном столбике StringTableMT расчеты по формулам, которые бы использовали значения из других столбцов?
С помощью каких элементов можно провести дополнительные расчеты для всех строк в дополнительных столбиках?
Может уже где-то эта тема поднималась?

В примерах HiAsm не видел такого. Есть принципы использования элементов из раздела "Логика", но не видел примера с их применением в StringTableMT.

карма: 0

0
Ответов: 8928
Рейтинг: 823
#15: 2014-08-12 09:01:30 ЛС | профиль | цитата
stygar, ещё не доделал сортировку по кодам, посмотрите, правильно-ли я Вас понял: mytablexcel.rar
(Хотя считаю, что Excel самодостаточна и прикручивать к ней свои программки излишне.)
карма: 19

0
файлы: 1mytablexcel.rar [3.9KB] [191]
Сообщение
...
Прикрепленные файлы
(файлы не залиты)