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

Откуда:
Сообщений: 61
Коллеги, подскажите пожалуйста как решить следующую задачу(с помошью хранимой процедуры):
Имеется:
xls-файл следующего вида:
Картинка с другого сайта.

Я его импортирую и получаю таблицу следующего вида (не уверен, что это лучший вариант):
F1F2F3F4F5F6F7F8F9F10F11F12F13F14F15F16F17F18F19F20F21F22F23F24F25F26F27F28F29
Значение6100868Значение17800.000600.000600.000600.000600.000787.619800.000800.0001200.0001200.0001200.0001200.0001200.0001200.0001200.0001200.0001200.0001200.0001200.0001200.0001200.0001200.0001200.0001200.00024787.619

В этой таблице в первой строке прописаны часовые диапазоны, а во второй значения для каждого из диапазонов.
Необходимо:
Сделать таблицу следующего вида:
dtvalue
2009-08-12 01:00:00800.000
2009-08-12 02:00:00600.000
2009-08-12 03:00:00600.000
2009-08-12 04:00:00600.000
2009-08-12 05:00:00600.000
2009-08-12 06:00:00787.619
2009-08-12 07:00:00800.000
2009-08-12 08:00:00800.000
2009-08-12 09:00:001200.000
2009-08-12 10:00:001200.000
2009-08-12 11:00:001200.000
2009-08-12 12:00:001200.000
2009-08-12 13:00:001200.000
2009-08-12 14:00:001200.000
2009-08-12 15:00:001200.000
2009-08-12 16:00:001200.000
2009-08-12 17:00:001200.000
2009-08-12 18:00:001200.000
2009-08-12 19:00:001200.000
2009-08-12 20:00:001200.000
2009-08-12 21:00:001200.000
2009-08-12 22:00:001200.000
2009-08-12 23:00:001200.000
2009-08-13 00:00:001200.000
12 авг 09, 13:22    [7527627]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104760
И в чем проблема ? UNION уже отменили ?
12 авг 09, 13:25    [7527659]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Или UNPIVOT отменили ?
12 авг 09, 13:26    [7527670]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать таблицу  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
почему "в виде хранимой процедуры"?
почему не делать сразу при импорте?
12 авг 09, 13:27    [7527680]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать таблицу  [new]
Albert71
Member

Откуда:
Сообщений: 61
Glory
И в чем проблема ? UNION уже отменили ?
Или UNPIVOT отменили ?
В MS SQL только начинаю работатть, поэтому хотелось бы увидеть конкретный код.

Дедушка
почему "в виде хранимой процедуры"?
почему не делать сразу при импорте?
Я обсалютно не против так делать, лишьбы результат был нужным. Загвоздка в том, что не пока для этого не хватает ума :-) Поэтому-то и пишу сдесь.
12 авг 09, 13:53    [7527904]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать таблицу  [new]
Владимир СА
Member

Откуда:
Сообщений: 7825
Интересно!
Ведь это инфа для куба, где еще имеется измерение "данные3". Ты куда его дел?
Наверное легче написать програмку обработки такого xls-файла. Тем более это шаблон.
Ведь все равно тебе придется обрабатывать не один такой файл?!!!
12 авг 09, 13:55    [7527910]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать таблицу  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
и какой же код в хранимой процедуре?

для спящего время бодрствования равносильно сну
12 авг 09, 14:00    [7527957]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Albert71
Glory
И в чем проблема ? UNION уже отменили ?
Или UNPIVOT отменили ?
В MS SQL только начинаю работатть, поэтому хотелось бы увидеть конкретный код.

Учитесь пользоваться стандаритным хелпом

http://msdn.microsoft.com/en-us/library/ms180026(SQL.90).aspx
http://msdn.microsoft.com/en-us/library/ms177634(SQL.90).aspx
12 авг 09, 14:04    [7527984]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать таблицу  [new]
Владимир СА
Member

Откуда:
Сообщений: 7825
Алексей2003
и какой же код в хранимой процедуре?
Если это ко мне вопрос, то я бы писал клиент-серверное приложение. Чтобы потом использовать его для других таких же xls-файлов.
Вопрос на чем автор топика может писать?
У нас для построения и работой с кубами имеется свой транслятор. Вот на нем я лично и пишу, если работать надо с кубами. Для того чтобы потом увидеть результаты прямо в разрезах куба.
12 авг 09, 14:10    [7528024]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать таблицу  [new]
Albert71
Member

Откуда:
Сообщений: 61
Владимир СА
Интересно!
Ведь это инфа для куба, где еще имеется измерение "данные3". Ты куда его дел?...
Мне необходимо получить ровно то, что я написал в первом посте. Никакого дополнительного измерения нет. Двумерная таблица.
Владимир СА
Наверное легче написать програмку обработки такого xls-файла...
Если бы я так хотел, то обязательно об этом бы сказал, а мне необходимо написать это на Transact-SQL)
Владимир СА
Тем более это шаблон.
Ведь все равно тебе придется обрабатывать не один такой файл?!!!
Да, обрабатывать придётся по одному файлу в день. Именно для этого я и хочу в MS SQL создать ХП, чтобы каждый раз при необходимости её запускать.

Glory
Учитесь пользоваться стандаритным хелпом
Хылпы я конечно же почитал. Но хочу ещё раз подметить, что в Transact-SQL я пока слабовато ориентируюсь и вследсвии чего, для меня не очень просто составлять более сложные запросы. Поэтому я был бы очень благодарен, если б кто смог написать код для всей задачи.
12 авг 09, 14:53    [7528363]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Albert71


Glory
Учитесь пользоваться стандаритным хелпом
Хылпы я конечно же почитал. Но хочу ещё раз подметить, что в Transact-SQL я пока слабовато ориентируюсь и вследсвии чего, для меня не очень просто составлять более сложные запросы. Поэтому я был бы очень благодарен, если б кто смог написать код для всей задачи.

Ну там же есть примеры !
Вы не в состоянии их адаптировать под свою задачу ?
12 авг 09, 14:59    [7528402]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать таблицу  [new]
Albert71
Member

Откуда:
Сообщений: 61
Glory
Albert71


Glory
Учитесь пользоваться стандаритным хелпом
Хылпы я конечно же почитал. Но хочу ещё раз подметить, что в Transact-SQL я пока слабовато ориентируюсь и вследсвии чего, для меня не очень просто составлять более сложные запросы. Поэтому я был бы очень благодарен, если б кто смог написать код для всей задачи.

Ну там же есть примеры !
Вы не в состоянии их адаптировать под свою задачу ?
К моему ужасу, нет :-(
12 авг 09, 15:00    [7528416]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать таблицу  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
2Владимир СА
не к Вам.

2Albert71
еще есть opendatasource. который позволяет сделать выборку из excel таблицы при условии наличия ODBC драйвера. тоже в хелпе почитать.

для спящего время бодрствования равносильно сну
12 авг 09, 15:58    [7528901]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать таблицу  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
тут стока написано по Вашей задаче,мало не покажется
-------------------------------------
Jedem Das Seine
12 авг 09, 16:12    [7529000]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать таблицу  [new]
Albert71
Member

Откуда:
Сообщений: 61
Алексей2003
еще есть opendatasource. который позволяет сделать выборку из excel таблицы при условии наличия ODBC драйвера.
Так с помощью него я и претаскиваю данные из excel-таблицы в sql-таблицу. Мне вот потом не понятно как преобразовать ячеки со значениями вида "00-01,01-02,...,23-24", в дату и проставив значения из под этих ячеек в записи соответствующие времени.
12 авг 09, 19:49    [7530204]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать таблицу  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
select [00-01] value, dateadd(hh, dt, 1) dt from #t
union all
select [01-02], dateadd(hh, dt, 2) from #t
...
union all
select [23-24], dateadd(hh, dt, 24) from #t
сказали ведь.

для спящего время бодрствования равносильно сну
12 авг 09, 19:54    [7530213]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать таблицу  [new]
Albert71
Member

Откуда:
Сообщений: 61
В общем порывшись по форуму и почитав хэлпы у меня хоть кое что получилось. Но всё равно никак не могу добиться нужного. Дело упёрлось в одно место. Это место в 37-й строке, нижеприведённого кода:
CREATE TABLE tdg220(
	[dt] [datetime] NOT NULL,
	[value] [float] NULL,
 CONSTRAINT [PK_tdg220] PRIMARY KEY CLUSTERED 
(
	[dt] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

DECLARE @temptable varchar(100)			--временная таблица
DECLARE @tdgtable varchar(100)			--таблица, в которую нужно поместить данные
DECLARE @column_name varchar(100)		
DECLARE	@fieldnum int					
DECLARE	@shift int					--столбец, с которого начинаются нужные значения
DECLARE	@dtStart datetime
DECLARE @dt datetime
DECLARE @val float
SET @temptable='tmptbltdg'
SET @tdgtable='tdg220'
IF  EXISTS (SELECT * FROM sys.objects WHERE name = @temptable)
DROP TABLE tmptbltdg

SELECT * INTO tmptbltdg
FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\test.xls";Extended Properties="Excel 8.0;HDR=No;IMEX=1"')...['Торговый график$']
WHERE F2='100868' or F4='00-01'

SET @dtStart='20090811'
SET @fieldnum=0
SET @shift=4

WHILE @fieldnum < 24
BEGIN
	select @column_name=column_name from information_schema.columns
	where table_name=@temptable and ordinal_position=@fieldnum+@shift
	SET @dt=dateadd(hh, @fieldnum, @dtStart)
	set @val=0	--!!!здесь необходимо присвоить значение, возвращаемое из строки ниже!!!
	exec ('SELECT '+@column_name+' FROM '+@temptable+' WHERE F2=100868')
	DELETE FROM tdg220 WHERE dt=@dt 
	INSERT INTO tdg220 VALUES (@dt, @val);
	set @fieldnum=@fieldnum+1
END

DROP TABLE tmptbltdg
Коллеги, подскажите пожалуйста как это сделать? И вообще, я уже кучу разных вариантов перепробовал и, если честно, уже очень сам запутался в своём коде. Думаю, как-то он у меня, мягко-говоря, не очень :-) Буду примного благодарен, если кто подскажет, как лучше.
17 авг 09, 15:03    [7546821]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать таблицу  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36803
FAQ почитайте, там есть ответ на ваш вопрос.
17 авг 09, 15:04    [7546833]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать таблицу  [new]
Albert71
Member

Откуда:
Сообщений: 61
Опять упёрся.
Вот эта часть кода:
	SET @mysql = 'SELECT @val = '+@column_name+' FROM '+@temptable+' WHERE F2 = '+@tp+
				' DELETE FROM '+@tdgtable+' WHERE dt = @dt'+
				' INSERT INTO '+@tdgtable+' VALUES (@dt, @val);' 
	exec sp_executesql @mysql, N'@dt datetime, @val float'
Даёт такую ошибку:
The parameterized query '(@dt datetime, @val float)SELECT @val = F4 FROM tmptbltdg WHERE ' expects the parameter '@dt', which was not supplied.

Подскажите, что не так?
18 авг 09, 12:10    [7550552]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать таблицу  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36803
Albert71
Опять упёрся.
Вот эта часть кода:
	SET @mysql = 'SELECT @val = '+@column_name+' FROM '+@temptable+' WHERE F2 = '+@tp+
				' DELETE FROM '+@tdgtable+' WHERE dt = @dt'+
				' INSERT INTO '+@tdgtable+' VALUES (@dt, @val);' 
	exec sp_executesql @mysql, N'@dt datetime, @val float'
Даёт такую ошибку:
The parameterized query '(@dt datetime, @val float)SELECT @val = F4 FROM tmptbltdg WHERE ' expects the parameter '@dt', which was not supplied.

Подскажите, что не так?
Ну там пример есть, в факе. Дочитайте его уже до конца, я не знаю.
18 авг 09, 12:10    [7550560]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать таблицу  [new]
Albert71
Member

Откуда:
Сообщений: 61
Гавриленко Сергей Алексеевич
Ну там пример есть, в факе. Дочитайте его уже до конца, я не знаю.
Дочитал. Как видите, не помогло. Если вам известно в чём ошибка, почему бы просто не сказать?
18 авг 09, 12:19    [7550627]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать таблицу  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36803
Albert71
Гавриленко Сергей Алексеевич
Ну там пример есть, в факе. Дочитайте его уже до конца, я не знаю.
Дочитал. Как видите, не помогло. Если вам известно в чём ошибка, почему бы просто не сказать?
В том, не так и не все параметры передали.
18 авг 09, 12:26    [7550670]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать таблицу  [new]
--__Александр__--
Member

Откуда:
Сообщений: 2631
Albert71
Если вам нужно готовое решение - обратитесь на форум работа. Тут только дают наводящие вопросы/советы.
18 авг 09, 12:26    [7550671]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать таблицу  [new]
iljy
Member

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

может посмотрите в BOL синтаксис вызова sp_executesql? Там все написано, и есть даже русский вариант.
18 авг 09, 12:28    [7550677]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать таблицу  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Albert71
Дочитал. Как видите, не помогло. Если вам известно в чём ошибка, почему бы просто не сказать?
Видать, всё-таки не дочитали.
Где у вас список значений параметров то? Там в синтаксе явно указано, если вы определили параметр/ы, то должны указать и определение значения/ий.
18 авг 09, 12:28    [7550683]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить