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

Откуда: Кемеровская область
Сообщений: 61
добрый день
прошу сильно не пинать, в sql новичек...
вопрос такой:
Server 2008 x64, SQL server 2008R2
таблица:
TagID(int)
SampleDateTime(bigint)
SampleValue(float)
QualityID(smallint)

TagID(int) номера источников
нужно выбрать данные по нескольким определенным номерам источников, в таком виде:
SampleDateTime | SampleValue по TagID(первый) | SampleValue по TagID(второй) |SampleValue по TagID(третий)

через дополнительные запросы получилось только
SampleDateTime |SampleValue по TagID(первый) | null | null
SampleDateTime | null |SampleValue по TagID(второй) | null
SampleDateTime | null | null |SampleValue по TagID(третий)

подскажите плз в какую сторону копать..
11 дек 12, 11:27    [13611235]     Ответить | Цитировать Сообщить модератору
 Re: разбор одного столбца по нескольким  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
case
Вот только ,чт о вы будете делать если тегов станет 20 ?
11 дек 12, 11:30    [13611255]     Ответить | Цитировать Сообщить модератору
 Re: разбор одного столбца по нескольким  [new]
chester1310
Member

Откуда: Кемеровская область
Сообщений: 61
Maxx,
их сейчас примерно 1500... :)
но выбирать нужно не более 4-5
выборка такая нужна для последующих вычислений разницы между этими полями, в них пишется вес, с 3-х весов, и нужно считать сколько за час, смену, и т.д
11 дек 12, 11:34    [13611288]     Ответить | Цитировать Сообщить модератору
 Re: разбор одного столбца по нескольким  [new]
chester1310
Member

Откуда: Кемеровская область
Сообщений: 61
может есть и другие способы таких вычислений, но я пока не знаю как по другому.. :(
11 дек 12, 11:38    [13611316]     Ответить | Цитировать Сообщить модератору
 Re: разбор одного столбца по нескольким  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
chester1310
SampleDateTime | SampleValue по TagID(первый) | SampleValue по TagID(второй) |SampleValue по TagID(третий)

сорри недосмотрел - вам PIVOT нужен
11 дек 12, 11:47    [13611398]     Ответить | Цитировать Сообщить модератору
 Re: разбор одного столбца по нескольким  [new]
chester1310
Member

Откуда: Кемеровская область
Сообщений: 61
Maxx,
хм...
спс :), читал про него, но видно плохо,
сейчас буду пробовать
11 дек 12, 12:36    [13611807]     Ответить | Цитировать Сообщить модератору
 Re: разбор одного столбца по нескольким  [new]
chester1310
Member

Откуда: Кемеровская область
Сообщений: 61
есть с PIVOT проблема..
он требует статистическую функцию, мне же надо выбирать данные без обработки
пример:
TagID--SampleDateTime--SampleValue--QualityID
760--634908774558870976--85--192
756--634908774558870976--4488--192
756--634908774547482956--4452--192
754--634908774547482956--239--192
553--634908774547482956--58--192
760--634908774547482956--86--192
673--634908774547482956--1--192
528--634908774537186938--17--192
540--634908774537186938--28569--192
673--634908774537186938--2--192

нужно выбрать примерно так:
SampleDateTime--TagID754(SampleValue)--TagID553(SampleValue)--TagID760(SampleValue)
634908774547482956--239--58--86
12 дек 12, 06:59    [13616531]     Ответить | Цитировать Сообщить модератору
 Re: разбор одного столбца по нескольким  [new]
chester1310
Member

Откуда: Кемеровская область
Сообщений: 61
и что самое плохое
SampleDateTime(время) может быть разное
12 дек 12, 07:08    [13616538]     Ответить | Цитировать Сообщить модератору
 Re: разбор одного столбца по нескольким  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
declare @t table (TagID int, Sampledatetime datetime, SampleValue float)
insert into @t(TagID, Sampledatetime , SampleValue)
select 1, '20120101', 10 
union all
select 2, '20120101', 12
union all
select 3, '20120101', 14 
union all
select 1, '20120102', 20 
union all
select 2, '20120102', 30 
union all
select 3, '20120102', 40 
select 
   Sampledatetime, [1],[2],[3]
from (
    select 
       TagID, Sampledatetime , SampleValue
    from @t    
) as src PIVOT(
    AVG(SampleValue) for TagID in ([1],[2],[3])
) as pvt


автор
SampleDateTime(время) может быть разное

ну так приведите его к одному знаменателя в выборке,если не критично
12 дек 12, 11:03    [13617413]     Ответить | Цитировать Сообщить модератору
 Re: разбор одного столбца по нескольким  [new]
chester1310
Member

Откуда: Кемеровская область
Сообщений: 61
чтото не получается..
на реальной базе делаю так:
select
[TagID], [1],[2],[3]
from (
select
[TagID], [SampleDateTime], [SampleValue]
from NumericSamples
) as src PIVOT(
AVG(SampleValue) for TagID in ([1],[2],[3])
) as pvt

вроде все по правилам..
"SELECT <несведенный столбец>"

в итоге получаем
Сообщение 207, уровень 16, состояние 1, строка 2
Недопустимое имя столбца "TagID".

где то туплю, а где не понимаю
12 дек 12, 13:12    [13618575]     Ответить | Цитировать Сообщить модератору
 Re: разбор одного столбца по нескольким  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
chester1310
select
[TagID] [SampleDateTime], [1],[2],[3]
from (
select
[TagID], [SampleDateTime], [SampleValue]
from NumericSamples
) as src PIVOT(
AVG(SampleValue) for TagID in ([1],[2],[3])
) as pvt
12 дек 12, 13:15    [13618616]     Ответить | Цитировать Сообщить модератору
 Re: разбор одного столбца по нескольким  [new]
chester1310
Member

Откуда: Кемеровская область
Сообщений: 61
вместо [TagID]
перепробовал все поля из таблицы, результат тот же
12 дек 12, 13:15    [13618617]     Ответить | Цитировать Сообщить модератору
 Re: разбор одного столбца по нескольким  [new]
chester1310
Member

Откуда: Кемеровская область
Сообщений: 61
Maxx
chester1310
select
[TagID] [SampleDateTime], [1],[2],[3]
from (
select
[TagID], [SampleDateTime], [SampleValue]
from NumericSamples
) as src PIVOT(
AVG(SampleValue) for TagID in ([1],[2],[3])
) as pvt


работает, отдает кучу записей с нулевыми полями..
12 дек 12, 13:20    [13618667]     Ответить | Цитировать Сообщить модератору
 Re: разбор одного столбца по нескольким  [new]
Maxx
Member [скрыт]

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

ну ваши данные видите только вы.....
12 дек 12, 13:22    [13618691]     Ответить | Цитировать Сообщить модератору
 Re: разбор одного столбца по нескольким  [new]
chester1310
Member

Откуда: Кемеровская область
Сообщений: 61
таблица откуда выбираем данные

TagID int Unchecked
SampleDateTime bigint Unchecked
SampleValue float Checked
QualityID smallint Unchecked

первые два поля с первичными ключами

SampleDateTime 1 2 3
634904154000639394 NULL NULL NULL
634906258522647792 NULL NULL NULL
634906934233778616 NULL NULL NULL
634905304330279842 NULL NULL NULL
634904916276790262 NULL NULL NULL
634906549578599005 NULL NULL NULL
634905990734917448 NULL NULL NULL
634908053389572309 NULL NULL NULL
634904482264527960 NULL NULL NULL
634904236836784888 NULL NULL NULL

и так 510685 строк
12 дек 12, 13:30    [13618785]     Ответить | Цитировать Сообщить модератору
 Re: разбор одного столбца по нескольким  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
chester1310
634904154000639394

а че прикольный datetime
Да и остальные поля я смотрю тоже одни NULL
 select top 10 [TagID], [SampleDateTime], [SampleValue] from ...

что показывает вообще ?
12 дек 12, 13:35    [13618831]     Ответить | Цитировать Сообщить модератору
 Re: разбор одного столбца по нескольким  [new]
chester1310
Member

Откуда: Кемеровская область
Сообщений: 61
TagID int NotNull
SampleDateTime bigint NotNull
SampleValue float Null
QualityID smallint NotNull

так правильнее наверное
12 дек 12, 13:36    [13618834]     Ответить | Цитировать Сообщить модератору
 Re: разбор одного столбца по нескольким  [new]
chester1310
Member

Откуда: Кемеровская область
Сообщений: 61
Maxx
chester1310
634904154000639394

а че прикольный datetime
Да и остальные поля я смотрю тоже одни NULL
 select top 10 [TagID], [SampleDateTime], [SampleValue] from ...

что показывает вообще ?


select top 10 [TagID], [SampleDateTime], [SampleValue] from NumericSamples
1 634903747461429346 0
6 634903747461429346 -8
7 634903747461429346 0
8 634903747461429346 0
13 634903747461429346 0
14 634903747461429346 0
19 634903747461429346 24
24 634903747461429346 0
25 634903747461429346 0
30 634903747461429346 24

"а че прикольный datetime" :) это вроде в никсовом формате
select top 10 [TagID], dbo.ToDate(SampleDateTime), [SampleValue] from NumericSamples
дает
1 2012-12-06 14:12:26.143 0
6 2012-12-06 14:12:26.143 -8
7 2012-12-06 14:12:26.143 0
12 дек 12, 13:39    [13618877]     Ответить | Цитировать Сообщить модератору
 Re: разбор одного столбца по нескольким  [new]
chester1310
Member

Откуда: Кемеровская область
Сообщений: 61
это сама функция...

ALTER FUNCTION [dbo].[ToDate](@value [bigint])
RETURNS [datetime] WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [HistorianFunctions].[UserDefinedFunctions].[ToDate]
12 дек 12, 13:45    [13618926]     Ответить | Цитировать Сообщить модератору
 Re: разбор одного столбца по нескольким  [new]
Maxx
Member [скрыт]

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

укажите вместо for TagID in ([1],[2],[3])
ваши реальные значения для TagID
12 дек 12, 13:48    [13618966]     Ответить | Цитировать Сообщить модератору
 Re: разбор одного столбца по нескольким  [new]
chester1310
Member

Откуда: Кемеровская область
Сообщений: 61
for TagID in ([177], [555], [357])
for TagID in ("177", "555", "357")

Сообщение 207, уровень 16, состояние 1, строка 2
Недопустимое имя столбца "1".
Сообщение 207, уровень 16, состояние 1, строка 2
Недопустимое имя столбца "2".
Сообщение 207, уровень 16, состояние 1, строка 2
Недопустимое имя столбца "3".

for TagID in ('177', '555', '357')

Сообщение 102, уровень 15, состояние 1, строка 8
Неправильный синтаксис около конструкции "177".

for TagID in ((177), (555), (357))

Сообщение 102, уровень 15, состояние 1, строка 8
Неправильный синтаксис около конструкции "(".

for TagID in (177, 555, 357)

Сообщение 102, уровень 15, состояние 1, строка 8
Неправильный синтаксис около конструкции "177".
12 дек 12, 13:57    [13619053]     Ответить | Цитировать Сообщить модератору
 Re: разбор одного столбца по нескольким  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
chester1310
for TagID in ([177], [555], [357])
for TagID in ("177", "555", "357")

Сообщение 207, уровень 16, состояние 1, строка 2
Недопустимое имя столбца "1".
Сообщение 207, уровень 16, состояние 1, строка 2
Недопустимое имя столбца "2".
Сообщение 207, уровень 16, состояние 1, строка 2
Недопустимое имя столбца "3".


ну документацию кто читать то будет
если
for TagID in ([177], [555], [357])

то и
select 
   Sampledatetime, [177], [555], [357]
from
12 дек 12, 14:01    [13619095]     Ответить | Цитировать Сообщить модератору
 Re: разбор одного столбца по нескольким  [new]
chester1310
Member

Откуда: Кемеровская область
Сообщений: 61
Maxx,

читать то читал....
но понял увы не все, буду внимательнее читать..

большой рахмет!!
заработало, буду дальше разбираться

плохо плюсики нельзя ставить :)
12 дек 12, 14:13    [13619211]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить