Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Нужен совет по методу  [new]
Eugene_p1
Member

Откуда: Москва
Сообщений: 295
Добрый день!

Имеется форма в Excel, которая заполняется филиалами, а затем сливается в базу SQL 2012 (криво, но это данность).
Форма имеет пару сотен, так сказать, Placeholders, полей для заполнения. В базу выгружаются все строки, где первые 2 поля заполнены, независимо от заполнения остальных.

Каждый филиал, разумеется, начинает заполнять записи каждого региона сверху и вниз пока у них не кончатся автомобили по каждому региону.
В результате информация, получаемая от каждого филиала, выглядит примерно так:
КодРегиона Индекс ГРН База Ставка Сумма
36 1.1х111хх11 100 25 2500
36 1.2о111оо11 100 25 2500
36 1.33а345аа1110025 2500
36 1.34
36 1.35
51 2.1х333хх22 100 35 3500
51 2.2у222уу22 10035 3500
51 2.3
51 2.4
51 2.5


Индекс - начинается с порядкового номера раздела, через точку идёт целое, инкремент=1 и до некоего лимита строк, в каждом разделе разный лимит.
Мне нужно консолидировать информацию по всем филиалам, собрав её в такую форму.
При этом не заполненные строки должны остаться, т.е. я не могу выкинуть их - должно быть полное соответствие форме.

Соответственно, в раздел 1 я собираю все авто региона 36, в раздел 2 - все по региону 51.

Как это можно сделать?

Спасибо всем отозвавшимся?

К сообщению приложен файл. Размер - 98Kb
16 июл 13, 15:56    [14573978]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по методу  [new]
Eugene_p1
Member

Откуда: Москва
Сообщений: 295
Eugene_p1,

В базе:

К сообщению приложен файл. Размер - 97Kb
16 июл 13, 15:56    [14573982]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по методу  [new]
Добрый Э - Эх
Guest
Eugene_p1,

спросил, конечно, красиво, но - непонятно.
Чем картинки постить, лучше приведи юзабильные примеры тестовых данных и желаемый результат на них.
16 июл 13, 15:59    [14573998]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по методу  [new]
П-Л
Guest
На экране приведен пример отчета. Видно, что там два уровня - регион и строки по региону - автомобили. Сделать буквально такой набор данных на сервере можно, достаточно одного юниона по двум уровням. Вот только толку будет немного - его ж как-то презентабельно на клиенте надо показывать. А отчетные системы и так его сами выведут, только надо выбрать подходящее клиентское средство. Но городить огород на сервере для этого не придется.
16 июл 13, 16:09    [14574047]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по методу  [new]
Eugene_p1
Member

Откуда: Москва
Сообщений: 295
П-Л,

Вот как раз клиентское приложение - тот же Excel, та же форма. Поэтому мне и нужно сохранить порядок строк.

А придумать как это сделать не могу.
16 июл 13, 16:40    [14574223]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по методу  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Eugene_p1,

У вас проблемы с заполнением какого-то столбца в таблице MSSQL при загрузке из Excel? Если да, то какой именно столбец вызывает затруднения?
16 июл 13, 17:03    [14574333]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по методу  [new]
Eugene_p1
Member

Откуда: Москва
Сообщений: 295
Нет.

Посмотрите на табличку в тексте. Таких табличек в базе 2, 3, ... [n]
Положим, что поле ГРН в каждой из них заканчивается на Индекс=1.7, далее идут пустые ГРН, а индекс до 1.1000, 2.1-2.n, 3.1-3.n, 4.1-4.n, и т.п.

Мне нужно сделать так, чтобы все номера ГРН и поля правее из всех табличек собрались в одну, грубо говоря заполненные индексы будут 1.1 - 1.117, 2.1-2.n, 3.1-3.n, 4.1-4.n, и т.п.

Результат я уже обработаю.

Мне бы направление подсказали. Но подробно. :)
16 июл 13, 17:14    [14574395]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по методу  [new]
Eugene_p1
Member

Откуда: Москва
Сообщений: 295
Eugene_p1
Таких табличек в базе 2, 3, ... [n]

Стоп, неверно выразился. Все данные в одной таблице. Просто туда загружены формы из n файлов Excel (c одинаковым количеством строк, кстати).
16 июл 13, 17:15    [14574410]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по методу  [new]
Eugene_p1
Member

Откуда: Москва
Сообщений: 295
Ап. Всё ещё актуально.
18 июл 13, 09:45    [14581685]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по методу  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Eugene_p1
Ап. Всё ещё актуально.

Если я правильно понял весь этот сумбур что вы написали в топике, у вас просто проблема с сортировкой в запросе, который выполняет excel при выборке данных из базы?
18 июл 13, 10:35    [14581988]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по методу  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 902
Eugene_p1
Нет.

Посмотрите на табличку в тексте. Таких табличек в базе 2, 3, ... [n]
Положим, что поле ГРН в каждой из них заканчивается на Индекс=1.7, далее идут пустые ГРН, а индекс до 1.1000, 2.1-2.n, 3.1-3.n, 4.1-4.n, и т.п.

Мне нужно сделать так, чтобы все номера ГРН и поля правее из всех табличек собрались в одну, грубо говоря заполненные индексы будут 1.1 - 1.117, 2.1-2.n, 3.1-3.n, 4.1-4.n, и т.п.

Результат я уже обработаю.

Мне бы направление подсказали. Но подробно. :)


У вас есть [n] файлов, которые вы заливаете по кокой-то логике в [n] таблиц на sql сервер.

Опишите понятней, что вам нужно получить. Из ваших пояснений не понял, в чем у вас проблема. Приведите пример двух файлов, для удобства уменьшите данные, но чтоб логика не изменилась.
18 июл 13, 10:55    [14582126]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по методу  [new]
Eugene_p1
Member

Откуда: Москва
Сообщений: 295
Чорт. :)
Я так старался объяснить понятно, что перестарался.

В базе 1 таблица.
В неё сваливаются данные из n файлов Excel.
С вводом-выводом в Excel у меня всё получается.

Единственное, что я не могу сгенерить - это выходную таблицу.

В каждой форме заполняются строки с начала - на скриншоте видна строка 1.10000, но каждую форму начинают заполнять с 1.1 и так далее.
Форма сохраняется в базу построчно - то есть из всех файлов Excel сохраняются все строки, даже пустые. Поэтому если мы сгруппируем их, скажем, по колонке [1], то получим одинаковое количество строк.

Мне нужно сохранив форму (т.е. количество и расположение строк), вывести полный список автомобилей, которые были загружены из этих форм, при этом сохранив разбивку по регионам, т.е. московские машины будут в разделе 2.
18 июл 13, 11:26    [14582334]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по методу  [new]
Glory
Member

Откуда:
Сообщений: 104751
Eugene_p1
Единственное, что я не могу сгенерить - это выходную таблицу.

https://www.sql.ru/forum/127456/rekomendacii-po-oformleniu-soobshheniy-v-forume п.4 и п.6
18 июл 13, 11:46    [14582527]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по методу  [new]
Eugene_p1
Member

Откуда: Москва
Сообщений: 295
Мне из
КодРегиона Индекс ГРН База Ставка Сумма
36 1.1х111хх11 100 25 2500
36 1.2о111оо11 100 25 2500
36 1.3
36 1.4
36 1.5
51 2.1х333хх22 100 35 3500
51 2.2
51 2.3
51 2.4
51 2.5


КодРегиона Индекс ГРН База Ставка Сумма
36 1.1а345аа1110025 2500
36 1.2
36 1.3
36 1.4
51 2.1у222уу22 10035 3500
51 2.3
51 2.4
51 2.5

нужно получить
КодРегиона Индекс ГРН База Ставка Сумма
36 1.1х111хх11 100 25 2500
36 1.2о111оо11 100 25 2500
36 1.3а345аа1110025 2500
36 1.4
36 1.5
51 2.1х333хх22 100 35 3500
51 2.2у222уу22 10035 3500
51 2.3
51 2.4
51 2.5
18 июл 13, 12:13    [14582759]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по методу  [new]
Eugene_p1
Member

Откуда: Москва
Сообщений: 295
Glory
Eugene_p1
Единственное, что я не могу сгенерить - это выходную таблицу.

https://www.sql.ru/forum/127456/rekomendacii-po-oformleniu-soobshheniy-v-forume п.4 и п.6


Glory,

Версию SQL я написал в 1 сообщении, но если нужна прямо с точностью до последних цифр (хоть это ничего не поменяет в этом случае):

Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (Intel X86) 
Oct 19 2012 13:43:21
Copyright (c) Microsoft Corporation
Express Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)


Что касается п.6, то да, я не следовал строго правилам создания красивого вопроса. Но я спрашиваю принцип, как организовать, какую конструкцию использовать.
18 июл 13, 12:22    [14582815]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по методу  [new]
Добрый Э - Эх
Guest
Eugene_p1
Мне из
+
КодРегиона Индекс ГРН База Ставка Сумма
36 1.1х111хх11 100 25 2500
36 1.2о111оо11 100 25 2500
36 1.3
36 1.4
36 1.5
51 2.1х333хх22 100 35 3500
51 2.2
51 2.3
51 2.4
51 2.5


КодРегиона Индекс ГРН База Ставка Сумма
36 1.1а345аа1110025 2500
36 1.2
36 1.3
36 1.4
51 2.1у222уу22 10035 3500
51 2.3
51 2.4
51 2.5

нужно получить
КодРегиона Индекс ГРН База Ставка Сумма
36 1.1х111хх11 100 25 2500
36 1.2о111оо11 100 25 2500
36 1.3а345аа1110025 2500
36 1.4
36 1.5
51 2.1х333хх22 100 35 3500
51 2.2у222уу22 10035 3500
51 2.3
51 2.4
51 2.5

За порядок строк внутри секций, вроде как, понятно (твой нумератор типа 1.1, 1.2, .... , 1.N).
А чем определяется порядок секций? По какому принципу решается, что первая группа строк должна быть именно первой, а не наоборот?
18 июл 13, 12:28    [14582875]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по методу  [new]
Eugene_p1
Member

Откуда: Москва
Сообщений: 295
Добрый Э - Эх,

Увы, это не мой нумератор. :( Там nvarchar.
Порядок секций фиксированный. Номер секции определен регионом. Код региона (integer) есть в таблице.

По идее, там LEFT JOIN самой себя по коду региона. Порядок строк внутри региона не важен.
18 июл 13, 12:42    [14583004]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по методу  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
По какому принцыпу записи из ГРН меняют индекс..т.е. 1.1 перехал в 1.3 для региона 36 ,и что делать если все индексы для региона будут заполнены ??? Создавать новый индекс ?
18 июл 13, 12:42    [14583006]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по методу  [new]
Добрый Э - Эх
Guest
Eugene_p1
Порядок секций фиксированный.

Я вот за что спрашивал. Почему секции идут в таком порядке:
Eugene_p1
Мне из
КодРегиона Индекс ГРН База Ставка Сумма
36 1.1х111хх11 100 25 2500
36 1.2о111оо11 100 25 2500
36 1.3
36 1.4
36 1.5
51 2.1х333хх22 100 35 3500
51 2.2
51 2.3
51 2.4
51 2.5


КодРегиона Индекс ГРН База Ставка Сумма
36 1.1а345аа1110025 2500
36 1.2
36 1.3
36 1.4
51 2.1у222уу22 10035 3500
51 2.3
51 2.4
51 2.5



А не в таком, например:
Eugene_p1
Мне из
КодРегиона Индекс ГРН База Ставка Сумма
36 1.1а345аа1110025 2500
36 1.2
36 1.3
36 1.4
51 2.1у222уу22 10035 3500
51 2.3
51 2.4
51 2.5


КодРегиона Индекс ГРН База Ставка Сумма
36 1.1х111хх11 100 25 2500
36 1.2о111оо11 100 25 2500
36 1.3
36 1.4
36 1.5
51 2.1х333хх22 100 35 3500
51 2.2
51 2.3
51 2.4
51 2.5



Как и чем ЭТО определятся?
18 июл 13, 13:05    [14583181]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по методу  [new]
Добрый Э - Эх
Guest
Maxx
По какому принцыпу записи из ГРН меняют индекс..т.е. 1.1 перехал в 1.3 для региона 36 ,и что делать если все индексы для региона будут заполнены ??? Создавать новый индекс ?
Это-то как раз и понятно - просто новая сквозная нумерация внутри региона после "склейки" двух разных секций этого региона.
18 июл 13, 13:06    [14583204]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по методу  [new]
Добрый Э - Эх
Guest
Eugene_p1
Порядок строк внутри региона не важен.
Если так, то всё просто до банальности - row_number() over(partition by КодРегиона order by case when ГРН is not null then 0 else 1 end, ГРН)
18 июл 13, 13:14    [14583277]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по методу  [new]
Добрый Э - Эх
Guest
Ну и как маленькая иллюстрация в коде: тынц
18 июл 13, 13:47    [14583562]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по методу  [new]
Eugene_p1
Member

Откуда: Москва
Сообщений: 295
Добрый Э - Эх,

Так. Сначала я получаю список строк
SELECT DISTINCT КодРегиона, Индекс FROM t1


Потом привязываю к нему строки склеенной таблицы?
SELECT DISTINCT КодРегиона, Индекс FROM t1
LEFT JOIN 
(SELECT row_number() over(partition by КодРегиона 
order by case when ГРН is not null then 0 else 1 end) as RowNum, ГРН, База, Ставка, Сумма) as t2 ON cast(SUBSTRING(Индекс, 2, LEN(Индекс)-1) as int) = RowNum 

по каким полям связывать? Я правильно связал?
18 июл 13, 13:53    [14583614]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по методу  [new]
Eugene_p1
Member

Откуда: Москва
Сообщений: 295
Добрый Э - Эх
Ну и как маленькая иллюстрация в коде: тынц


Вы просто супер!
Отличный пример, дальше я уже разберусь, раскопаю сам.

Спасибо огромное за потраченное время!
18 июл 13, 13:56    [14583651]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по методу  [new]
Eugene_p1
Member

Откуда: Москва
Сообщений: 295
Остался еще вопрос.

Запрос возвращает все 18 строк.
А нужно только 9.

На примере раздела 1:
Строки должны заканчиваться на 1.5, а они заканчиваются на 1.9 (тут я косанул, не допечатал строку в одной из таблиц, количество строк в них одинаковое, должно быть 1.10).

Проблема в том, что в разделах разное количество строк. :(
в разделе 1 их может быть 7, в разделе 2 - 13, в разделе 3 - 21, и т.д.
Но
SELECT Индекс FROM t1 GROUP BY Индекс
вернёт их в таком виде, как надо.
18 июл 13, 14:27    [14583935]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить