Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: сумма значений каждого шестого столбца  (Прочитано 10463 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
Dwalin
Интересующийся

ru
Offline Offline

« : 03-02-2012 07:09 » 

Добрый день, знатоки SQL. (я не очень хорошо в нем разбираюсь)
Помогите разобраться с 2-мя проблемами.
1. Есть куча файлов excel в определенной папке, как их массово импортировать в sql (sql2008r2 express). Чтобы добавилось поле с названием файла. Для 1 файла использую следующий код:

SELECT * into temptable FROM OPENROWSET
('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=D:\dwalin\rup\rup020201.xlsm;HDR=NO;imex=1',
'select * from [развернутый план$]')


2. Как просуммировать значение каждого 6 столбца. 128 столбец последний. То есть тут я прошу конкретный код.
для 1 столбца

use SVFU
SELECT SUM (convert (int,[SVFU].[dbo].[rup020201].[f3]))
FROM [SVFU].[dbo].[rup020201]
where [SVFU].[dbo].[rup020201].[f3] in('тут моё условие')

я так понимаю что в строке SELECT SUM (convert (int,[SVFU].[dbo].[rup020201].[f3])) 3 надо заменить на переменную, которую загнать в цикл с шагом 6. Вот тут я зашел в тупик. Заранее спасибо
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 03-02-2012 07:15 » 

есть такое секретное слово having, но сомневаюсь, что оно поможет.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 03-02-2012 08:09 » new

2. Со столбцами работает только вертикальный фильтр, а остальные операции рассчитаны на работу со строками.

Либо повысить нормализацию данных и заменить таблицу с 128-ю столбцами на что-нибудь более пригодное для обработки (фактически, развернуть столбцы в строки). Либо вручную перечислить через + все столбцы. Можно попробовать написать динамический запрос (т.е. программу, которая сначала записывает строчку с SQL-запросом, а затем эту строчку передаёт на выполнение).

1. А файлы одинаковой структуры?

Sla, having тут ни к селу, ни к городу. Это вторичный горизонтальный фильтр по уже выполненными группировкам.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 03-02-2012 08:27 » 

Все верно,  сначала первичную выборку, а затем фильтр
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dwalin
Интересующийся

ru
Offline Offline

« Ответ #4 : 05-02-2012 23:56 » 

2. Вот транспонировать таблицы не получилось.  Так бы получилась более нормализованная таблица. Может, подскажете, как лучше пострить запрос на загрузку данных с данного файла для нормализации данных?
1. Да, все файлы имеют одинаковую структуру.

Добавлено через 37 секунд:
еще

* 020201.part1.rar (1000 Кб - загружено 881 раз.)
* 020201.part2.rar (1000 Кб - загружено 829 раз.)
« Последнее редактирование: 05-02-2012 23:56 от Dwalin » Записан
Dwalin
Интересующийся

ru
Offline Offline

« Ответ #5 : 05-02-2012 23:57 » 

еще

Добавлено через 22 секунды:
еще

* 020201.part3.rar (1000 Кб - загружено 848 раз.)
* 020201.part4.rar (1000 Кб - загружено 751 раз.)
« Последнее редактирование: 05-02-2012 23:57 от Dwalin » Записан
Dwalin
Интересующийся

ru
Offline Offline

« Ответ #6 : 05-02-2012 23:57 » 

последний
в данном файле интересует лист "Развернутый План"

* 020201.part5.rar (104.31 Кб - загружено 884 раз.)
« Последнее редактирование: 06-02-2012 00:07 от Dwalin » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 06-02-2012 06:47 » 

Dwalin, для нормализации нужно не запросы писать, а таблицы переделывать.

Что касается Excel, то обработка файлов требует цикла по самим файлам. Нужно как-то получить их имена. Такую задачу проще решить на VBA в самом Excel, подключившись к SQL Server, чем из SQL Server.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Kivals
Команда клуба

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 06-02-2012 07:27 » 

Если речь только о листе "Развернутый План" то можно обойтись просто 7ю запросами (через copy-paste и изменения) и сделать это через хранимую процедуру на SQL server. Имя файла - передается как входящий параметр и в запросе используется как константа, ключем к нормальзиции будет Номер курса - в каждом запросе он тоже будет как константа.
Первым запросом делаем выборку из файла во временную таблицу, потом остальными - выборку из временной в основную таблицу:
Код: (T-SQL)
insert into main_table from
select 1 as [Курс], file as [ИмяФайла], [f3] as [Нужное имя]...
union all
select 2 as [Курс], file as [ИмяФайла], [f9] as [Нужное имя]...
...
Не забудь добавить условия, чтобы пустые строки не тянулись (поскольку условия намечаются сложные, а операция разовая - я бы делал через условие во внешнем запросе, а все "union all" выделил бы во вложенный запрос)
P.S. в MS SQL не силен - синтаксис точно не соответствет стандартам, но суть думаю понятна
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines