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

Откуда:
Сообщений: 19
По порядку...
Есть таблица с несколькими столбцами. К таблице выполняется два одинаковых запроса SELECT, но с разным предикатами WHERE и разными псевдонимами столбцов. Необходимо свести результат
в "расширенный" набор данных содержащий столбцы из обоих запросов.

Например,

SELECT field_a AS field_c FROM table1 WHERE field_b = 0
SELECT field_a AS field_d FROM table1 WHERE field_b = 1

и в результате получаем набор данных с полями field_c и field_d

Куда копать?
28 май 09, 11:28    [7238330]     Ответить | Цитировать Сообщить модератору
 Re: Разделить данные столбца по критерию  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Рекомендации по оформлению сообщений в форуме п.6 и 4
28 май 09, 11:30    [7238349]     Ответить | Цитировать Сообщить модератору
 Re: Разделить данные столбца по критерию  [new]
iljy
Guest
bender_rodriguez,

select field_c, field_d from
  (SELECT ROW_NUMBER() OVER() r_num, field_a AS field_c FROM table1 WHERE field_b = 0) t1
    full join
  (SELECT ROW_NUMBER() OVER() r_num, field_a AS field_d FROM table1 WHERE field_b = 1) t2
     on t1.r_num = t2.r_num
28 май 09, 11:33    [7238377]     Ответить | Цитировать Сообщить модератору
 Re: Разделить данные столбца по критерию  [new]
проходящий.
Guest
bender_rodriguez,
SELECT case when field_b = 0 then field_a else null end AS field_c FROM table1 WHERE field_b = 0
union
SELECT case when field_b = 1 then field_a else null end AS field_d FROM table1 WHERE field_b = 1
Оно?
28 май 09, 11:39    [7238414]     Ответить | Цитировать Сообщить модератору
 Re: Разделить данные столбца по критерию  [new]
bender_rodriguez
Member

Откуда:
Сообщений: 19
Паганель
MS SQL SERVER 2000
Ворпос можно рассматривать как академический... собственно, пример практически соответствует реальному запросу за исключением предикатов и именования полей. Во всех полях NULL not allowed, field_b содержт как 0 так и 1

iljy
'ROW_NUMBER' is not a recognized function name.
но идея понятна, посмотрю в эту сторону ;-)

проходящий.
несколько не то
28 май 09, 11:53    [7238514]     Ответить | Цитировать Сообщить модератору
 Re: Разделить данные столбца по критерию  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
bender_rodriguez
Ворпос можно рассматривать как академический... собственно, пример практически соответствует реальному запросу
Я скрипты просил и пример результата
И где это все?
28 май 09, 11:56    [7238531]     Ответить | Цитировать Сообщить модератору
 Re: Разделить данные столбца по критерию  [new]
проходящий.
Guest
bender_rodriguez
проходящий.
несколько не то
Ну, значит мой магческий кристалл не имеет досточной силы. Излагайте, как должно выглядеть "ТО".
28 май 09, 12:01    [7238568]     Ответить | Цитировать Сообщить модератору
 Re: Разделить данные столбца по критерию  [new]
bender_rodriguez
Member

Откуда:
Сообщений: 19
Паганель,
Не понимаю вас... ну выложу я сюда скрипт, будут там другие именования полей и что? Поверьте скрипт действительно простой..

Прошу пощения за желаемый результат...

в результате получаем набор данных со столбцами field_c и field_d
28 май 09, 12:05    [7238596]     Ответить | Цитировать Сообщить модератору
 Re: Разделить данные столбца по критерию  [new]
Glory
Member

Откуда:
Сообщений: 104760
bender_rodriguez
Паганель,
Не понимаю вас... ну выложу я сюда скрипт, будут там другие именования полей и что? Поверьте скрипт действительно простой..

Если там будет пример входных и выходных данных, то это даст гораздо больше информации, чем ваши объяснения "на пальцах"
28 май 09, 12:07    [7238615]     Ответить | Цитировать Сообщить модератору
 Re: Разделить данные столбца по критерию  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
bender_rodriguez
ну выложу я сюда скрипт, будут там другие именования полей и что?
и существенно ускорите нахождение решения

именно так и написано в рекомендациях
28 май 09, 12:07    [7238617]     Ответить | Цитировать Сообщить модератору
 Re: Разделить данные столбца по критерию  [new]
Konst_One
Member

Откуда:
Сообщений: 11513
вы представьте выборку из вашей таблицы и желаемый результат, а мы уж решим, что и как
28 май 09, 12:08    [7238632]     Ответить | Цитировать Сообщить модератору
 Re: Разделить данные столбца по критерию  [new]
проходящий.
Guest
bender_rodriguez
Паганель,
Не понимаю вас... ну выложу я сюда скрипт, будут там другие именования полей и что? Поверьте скрипт действительно простой..
Речь не о простоте скрипта, а о понимании условий задачи. Нужен пример исходных данных и результат их обработки. Ибо очень часто объясняют совсем не то, что хотят объяснить.
28 май 09, 12:11    [7238655]     Ответить | Цитировать Сообщить модератору
 Re: Разделить данные столбца по критерию  [new]
bender_rodriguez
Member

Откуда:
Сообщений: 19
Ну... получайте

SELECT PK_DATE AS StartTime, EventType AS StartEventType FROM Events WHERE (PK_DATE > @dtStartTime) AND (PK_DATE < @dtEndTime)AND (EventType = 2)
SELECT PK_DATE AS StopTime, EventType AS StopEventType FROM Events WHERE (PK_DATE > @dtStartTime) AND (PK_DATE < @dtEndTime) AND (EventType = 5)

вот результат
StartTime                     StartEventType
2009-05-05 15:10:28.342        2
2009-05-05 15:50:13.483        2

StopTime                     StopEventType
2009-05-05 15:10:46.140        2
2009-05-05 16:54:58.560        2

Хочу чтоб было так ;-)
StartTime                     StopTime            StartEventType  StopEventType
2009-05-05 15:10:28.342  2009-05-05 15:10:46.140      2             5
2009-05-05 15:50:13.483  2009-05-05 16:54:58.560      2             5

Структуру базы и таблиц менять не могу...;-)
28 май 09, 12:21    [7238747]     Ответить | Цитировать Сообщить модератору
 Re: Разделить данные столбца по критерию  [new]
iljy
Guest
bender_rodriguez

MS SQL SERVER 2000
iljy
'ROW_NUMBER' is not a recognized function name.
но идея понятна, посмотрю в эту сторону ;-)

С версии и надо начинать. нумерация строк на 2000
можно еще например так:
SELECT field_a AS field_c, NULL as field_d FROM table1 WHERE field_b = 0
   UNION ALL
SELECT NULL, field_a AS field_d FROM table1 WHERE field_b = 1

28 май 09, 12:26    [7238782]     Ответить | Цитировать Сообщить модератору
 Re: Разделить данные столбца по критерию  [new]
проходящий.
Guest
bender_rodriguez
Ну... получайте

Хочу чтоб было так ;-)
StartTime                     StopTime            StartEventType  StopEventType
2009-05-05 15:10:28.342  2009-05-05 15:10:46.140      2             5
2009-05-05 15:50:13.483  2009-05-05 16:54:58.560      2             5

И откуда появились пятерки?
28 май 09, 12:27    [7238787]     Ответить | Цитировать Сообщить модератору
 Re: Разделить данные столбца по критерию  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
bender_rodriguez
Ну... получайте
Типа, одолжение что-ли?
bender_rodriguez
Структуру базы и таблиц менять не могу...;-)
А где здесь структура? И заполнения тестовыми данными нет.
28 май 09, 12:28    [7238802]     Ответить | Цитировать Сообщить модератору
 Re: Разделить данные столбца по критерию  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Этот запрос
bender_rodriguez
SELECT PK_DATE AS StopTime, EventType AS StopEventType FROM Events 
WHERE (PK_DATE > @dtStartTime) AND (PK_DATE < @dtEndTime) AND (EventType = 5)
выдал эти данные:
bender_rodriguez
StopTime                     StopEventType
2009-05-05 15:10:46.140        2
2009-05-05 16:54:58.560        2
?
28 май 09, 12:35    [7238861]     Ответить | Цитировать Сообщить модератору
 Re: Разделить данные столбца по критерию  [new]
bender_rodriguez
Member

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

не, не пойдет... NULL not allowed

to all,

нет, я не делаю одолжение и не ищу готового решения.
28 май 09, 12:37    [7238881]     Ответить | Цитировать Сообщить модератору
 Re: Разделить данные столбца по критерию  [new]
bender_rodriguez
Member

Откуда:
Сообщений: 19
Паганель,

нет кончно, очепятка, занете ли :-)
28 май 09, 12:39    [7238899]     Ответить | Цитировать Сообщить модератору
 Re: Разделить данные столбца по критерию  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
iljy
С версии и надо начинать. нумерация строк на 2000
Возможно, нумерация строк тут вообще не нужна.
Может, надо каждому началу временнòго промежутка из одной таблицы подобрать ближайший конец временнòго промежутка из второй таблицы?
28 май 09, 12:39    [7238902]     Ответить | Цитировать Сообщить модератору
 Re: Разделить данные столбца по критерию  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
iap
iljy
С версии и надо начинать. нумерация строк на 2000
Возможно, нумерация строк тут вообще не нужна.
Может, надо каждому началу временнòго промежутка из одной таблицы подобрать ближайший конец временнòго промежутка из второй таблицы?
Конечно, имел в виду не таблицы, а множества строк с field_b = 0 и field_b = 1 соответственно
28 май 09, 12:42    [7238928]     Ответить | Цитировать Сообщить модератору
 Re: Разделить данные столбца по критерию  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
bender_rodriguez
Хочу чтоб было так ;-)
StartTime                     StopTime            StartEventType  StopEventType
2009-05-05 15:10:28.342  2009-05-05 15:10:46.140      2             5
2009-05-05 15:50:13.483  2009-05-05 16:54:58.560      2             5
А почему не так
StartTime                     StopTime            StartEventType  StopEventType
2009-05-05 15:50:13.483  2009-05-05 15:10:46.140      2             5
2009-05-05 15:10:28.342  2009-05-05 16:54:58.560      2             5
?
28 май 09, 12:44    [7238944]     Ответить | Цитировать Сообщить модератору
 Re: Разделить данные столбца по критерию  [new]
Konst_One
Member

Откуда:
Сообщений: 11513
вам нужен excel и магическое перетаскивание колонки из одного результата в другой =)
28 май 09, 13:08    [7239131]     Ответить | Цитировать Сообщить модератору
 Re: Разделить данные столбца по критерию  [new]
iljy
Guest
bender_rodriguez
iljy,

не, не пойдет... NULL not allowed


так он в таблице not allowed, при чем тут выборка? или принципиально чтоб в выборке NULL не было? тогда у вас всегда обязано совпадать количество записей в одной выборке и в другой!

bender_rodriguez


вот результат
StartTime                     StartEventType
2009-05-05 15:10:28.342        2
2009-05-05 15:50:13.483        2

StopTime                     StopEventType
2009-05-05 15:10:46.140        2
2009-05-05 16:54:58.560        2

Хочу чтоб было так ;-)
StartTime                     StopTime            StartEventType  StopEventType
2009-05-05 15:10:28.342  2009-05-05 15:10:46.140      2             5
2009-05-05 15:50:13.483  2009-05-05 16:54:58.560      2             5

Структуру базы и таблиц менять не могу...;-)

вот у нас уже и даты какие-то появились! внимание - вопрос! у вас независимые выборки и вам все равно какие значения попадут в одну строку? тогда берите вариант с NULL и не морочьте голову, NULL вам все равно придется проверять при получении, ибо количество записей может оказаться разное. А если выборки зависимые и надо слить их по определенному принципу - тогда огласите его наконец!
28 май 09, 13:20    [7239248]     Ответить | Цитировать Сообщить модератору
 Re: Разделить данные столбца по критерию  [new]
bender_rodriguez
Member

Откуда:
Сообщений: 19
Вопрос закрыт.
в основе решения предложение iljy, спасибо ;-)

iljy
bender_rodriguez,

select field_c, field_d from
  (SELECT ROW_NUMBER() OVER() r_num, field_a AS field_c FROM table1 WHERE field_b = 0) t1
    full join
  (SELECT ROW_NUMBER() OVER() r_num, field_a AS field_d FROM table1 WHERE field_b = 1) t2
     on t1.r_num = t2.r_num
28 май 09, 15:13    [7240180]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить