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

Откуда:
Сообщений: 267
есть таблица
ИД Проект Дата Задача
1 Посадить дерево 01.08.2011 Подумать
1 Посадить дерево 02.08.2011 Перестать заниматься ерундой
2 Написать sql-запрос 16.08.2011 Попробовать сделать самому
2 Написать sql-запрос 17.08.2011 Написать на форуме SQL.RU
2 Написать sql-запрос 17.08.2011 Выслушать насмешки "мегаспецов" SQL
2 Написать sql-запрос 18.08.2011 Выслушать дельные мысли адекватных SQL-спецов
3 Завоевание мира 4.03.2012 Стать Президентом РФ
3 Завоевание мира 5.03.2012 Объявить войну США
3 Завоевание мира 31.12.2012 Разбомбить всё к чёрту


нужно сделать
ИД Проект Задачи
1 Посадить дерево 01.08.2011 Подумать / 02.08.2011 Перестать заниматься ерундой
2 Написать sql-запрос 16.08.2011 Попробовать сделать самому / 17.08.2011 Написать на форуме SQL.RU / 17.08.2011 Выслушать насмешки "мегаспецов" SQL / 18.08.2011 Выслушать дельные мысли адекватных SQL-спецов
3 Завоевание мира 4.03.2012 Стать Президентом РФ / 5.03.2012 Объявить войну США / 31.12.2012 Разбомбить всё к чёрту


Запрос необходимо выполнять на SQL 2008 R2. Разделитель в 3 столбце (Задачи) вместо "/" может быть любой - лучше "," (запятая).
Бьюсь второй день, но так как опыта в составлении запросов было немного, пока не смог его составить.
Есть варианты, как это можно сделать?

Заранее благодарю за помощь!
17 авг 11, 10:04    [11130784]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос (группировка с заполнением множества значений в одну ячейку) =-  [new]
Glory
Member

Откуда:
Сообщений: 104751
xm?!_(mo3roBa9_akTuBHocTb)
Есть варианты, как это можно сделать?

Даже в FAQ уже занесены варианты
17 авг 11, 10:05    [11130794]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос (группировка с заполнением множества значений в одну ячейку) =-  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 7498
xm?!_(mo3roBa9_akTuBHocTb)
17.08.2011 Выслушать насмешки "мегаспецов" SQL
18.08.2011 Выслушать дельные мысли адекватных SQL-спецов

xm?!_(mo3roBa9_akTuBHocTb)
Есть варианты, как это можно сделать?

Ответ очевиден - ждать до завтра.
17 авг 11, 10:29    [11130957]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос (группировка с заполнением множества значений в одну ячейку) =-  [new]
Немегаспец
Guest
env,
17 авг 11, 10:44    [11131063]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос (группировка с заполнением множества значений в одну ячейку) =-  [new]
igor2222
Member

Откуда: Харків
Сообщений: 1233
Где-то рядом...

SELECT DISTINCT 'проект', 
	   REVERSE(SUBSTRING(REVERSE((SELECT CONVERT(VARCHAR(11), 'Дата', 104) + 
                                                                 'Задача' + ' / ' AS 'data()' 
								                 FROM 
								                    'Таблица' a
								                 WHERE temp.'ИД'=a.'ИД'  
								                 FOR XML PATH('')
								                )),4,4000)) AS 'Задачи' 
                                                                             
	 FROM 'Таблица' temp
ORDER BY temp.'ИД'
17 авг 11, 12:32    [11132038]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос (группировка с заполнением множества значений в одну ячейку) =-  [new]
xm?!_(mo3roBa9_akTuBHocTb)
Member

Откуда:
Сообщений: 267
Glory,
вы имели это - https://www.sql.ru/faq/faq_topic.aspx?fid=130 ? Это мне немного не подходит.

Необходимо написать этот запрос не используя функции, временные таблицы и т.п. Требуется написать одним запросом, используя стандарт SQL92.

Есть варианты, как это сделать?
17 авг 11, 13:22    [11132601]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос (группировка с заполнением множества значений в одну ячейку) =-  [new]
xm?!_(mo3roBa9_akTuBHocTb)
Member

Откуда:
Сообщений: 267
Такие ограничения потому, что запрос должен нормально запускаться и отрабатываться во View.
17 авг 11, 13:27    [11132633]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос (группировка с заполнением множества значений в одну ячейку) =-  [new]
xm?!_(mo3roBa9_akTuBHocTb)
Member

Откуда:
Сообщений: 267
ps: имхо, впечатление что env сам себе написал (поставив смайлик) разлогиневшись =)
17 авг 11, 13:30    [11132663]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос (группировка с заполнением множества значений в одну ячейку) =-  [new]
Glory
Member

Откуда:
Сообщений: 104751
xm?!_(mo3roBa9_akTuBHocTb)
Такие ограничения потому, что запрос должен нормально запускаться и отрабатываться во View.

А во View функции разрешены
17 авг 11, 13:31    [11132667]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос (группировка с заполнением множества значений в одну ячейку) =-  [new]
igor2222
Member

Откуда: Харків
Сообщений: 1233
Такое впечатление, что топик врайтеру видны не все посты... Не подскажете, как снять статус "Невидимый"?
17 авг 11, 13:53    [11132866]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос (группировка с заполнением множества значений в одну ячейку) =-  [new]
_Shakill
Guest
igor2222, топикврайтер непонятно зачем просит SQL 92 на сервере R2. видимо, for xml path по этой причине отсеялось )
17 авг 11, 14:00    [11132944]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос (группировка с заполнением множества значений в одну ячейку) =-  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
xm?!_(mo3roBa9_akTuBHocTb)
Требуется написать одним запросом, используя стандарт SQL92.
А зачем Вам тогда SQL 2008 R2?
Это я в порядке насмешки от 17.08.2011 :)
17 авг 11, 14:02    [11132981]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос (группировка с заполнением множества значений в одну ячейку) =-  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Так, наверно, должно работать (не проверял!)
SELECT t.ИД, MIN(t.Проект)Проект,
 STUFF
 (
  (
   SELECT ' / '+CONVERT(VARCHAR(10),tt.Дата,104)+' '+tt.Задача
   FROM таблица tt
   WHERE tt.ИД=t.ИД
   ORDER BY tt.Дата
   FOR XML PATH(''),
   TYPE
  ).value('text()[1]','VARCHAR(MAX)'),1,3,''
 )
FROM таблица t
GROUP BY t.ИД
ORDER BY t.ИД;
Только вот SQL-92 не соответствует
17 авг 11, 14:18    [11133117]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос (группировка с заполнением множества значений в одну ячейку) =-  [new]
igor2222
Member

Откуда: Харків
Сообщений: 1233
О! Умная мысль слеш в начале вставлять :) Не додумался почему-то :) Сенкс! Только сабстринг быстрее стаффа сработает, но это уже мелочи.
17 авг 11, 15:32    [11133922]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос (группировка с заполнением множества значений в одну ячейку) =-  [new]
xm?!_(mo3roBa9_akTuBHocTb)
Member

Откуда:
Сообщений: 267
igor2222,
спасибо, просто под рукой не было компа, чтобы опробовать и разобраться в вашем варианте. Сейчас буду пробовать.

iap, благодарю.

Glory,
мне нужно это внедрить в действующий сложный (хотя, больше запутанный) запрос, который находится во View. Там опасно один символ поставить - всё развалится, а сильно видоизменять - тем более.
17 авг 11, 16:21    [11134316]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос (группировка с заполнением множества значений в одну ячейку) =-  [new]
Glory
Member

Откуда:
Сообщений: 104751
xm?!_(mo3roBa9_akTuBHocTb)
Glory,
мне нужно это внедрить в действующий сложный (хотя, больше запутанный) запрос, который находится во View. Там опасно один символ поставить - всё развалится, а сильно видоизменять - тем более.

A SQL92 - это гарантия того, что ничего не развалится ?
17 авг 11, 16:28    [11134361]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос (группировка с заполнением множества значений в одну ячейку) =-  [new]
xm?!_(mo3roBa9_akTuBHocTb)
Member

Откуда:
Сообщений: 267
да
17 авг 11, 20:56    [11135982]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос (группировка с заполнением множества значений в одну ячейку) =-  [new]
xm?!_(mo3roBa9_akTuBHocTb)
Member

Откуда:
Сообщений: 267
iap
SELECT t.ИД, MIN(t.Проект)Проект,
 STUFF
 (
  (
   SELECT ' / '+CONVERT(VARCHAR(10),tt.Дата,104)+' '+tt.Задача
   FROM таблица tt
   WHERE tt.ИД=t.ИД
   ORDER BY tt.Дата
   FOR XML PATH(''),
   TYPE
  ).value('text()[1]','VARCHAR(MAX)'),1,3,''
 )
FROM таблица t
GROUP BY t.ИД
ORDER BY t.ИД;
Только вот SQL-92 не соответствует


такой запрос у меня в качестве обычного запроса выполняется, а в представлении (view) не отрабатывается :(
Появляется следующая ошибка:
Error in ORDER BY clause.
Unable to parse query text.
может кто-то знает, где-то есть информация о том, какие ограничения существуют на синтаксис SQL в представлении?
23 авг 11, 22:16    [11167814]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос (группировка с заполнением множества значений в одну ячейку) =-  [new]
_Shakill
Guest
xm?!_(mo3roBa9_akTuBHocTb)
может кто-то знает, где-то есть информация о том, какие ограничения существуют на синтаксис SQL в представлении?


как обычно, знает справка
в статье CREATE VIEW эти ограничения и расписаны
23 авг 11, 22:24    [11167858]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос (группировка с заполнением множества значений в одну ячейку) =-  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
xm?!_(mo3roBa9_akTuBHocTb),

упорядочивание внутри VIEW невозможно.
ORDER BY можно там писать только в составе конструкции TOP ... ORDER BY
При этом упорядочивание всё равно никто не гарантирует.
24 авг 11, 09:14    [11168873]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос (группировка с заполнением множества значений в одну ячейку) =-  [new]
xm?!_(mo3roBa9_akTuBHocTb)
Member

Откуда:
Сообщений: 267
всё как вы сказали..

msdn.microsoft.com
Предложения SELECT, используемые в определении представления, не могут включать следующие элементы:

предложения COMPUTE и COMPUTE BY;

предложение ORDER BY, если только в списке выбора инструкции SELECT нет также предложения TOP;

Примечание
Предложение ORDER BY используется в определении представления только для упорядочивания строк, возвращаемых предложением TOP. Предложение ORDER BY не гарантирует упорядочивания результатов при запросе к представлению, если оно не указано в самом запросе.


ключевое слово INTO;

предложение OPTION;

ссылку на временную таблицу или табличную переменную.


У меня нет большого опыта программирования под SQL, поэтому знающие спецы SQL подскажите,
какой объект SQL наиболее лучше заменит View, в котором нет таких ограничений и чтобы к нему было также просто обращаться и работать с ним через View.
24 авг 11, 09:32    [11168938]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос (группировка с заполнением множества значений в одну ячейку) =-  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
xm?!_(mo3roBa9_akTuBHocTb),

ORDER BY в принципе может работать для упорядочивания результата
только на самом внешнем уровне всего запроса.
24 авг 11, 09:37    [11168967]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос (группировка с заполнением множества значений в одну ячейку) =-  [new]
iljy
Member

Откуда:
Сообщений: 8711
xm?!_(mo3roBa9_akTuBHocTb)
У меня нет большого опыта программирования под SQL, поэтому знающие спецы SQL подскажите,
какой объект SQL наиболее лучше заменит View, в котором нет таких ограничений и чтобы к нему было также просто обращаться и работать с ним через View.

А просто ORDER BY убрать из запроса не?
24 авг 11, 09:38    [11168968]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос (группировка с заполнением множества значений в одну ячейку) =-  [new]
xm?!_(mo3roBa9_akTuBHocTb)
Member

Откуда:
Сообщений: 267
iljy,
тогда не выводит нужный результат
24 авг 11, 10:34    [11169263]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос (группировка с заполнением множества значений в одну ячейку) =-  [new]
Glory
Member

Откуда:
Сообщений: 104751
xm?!_(mo3roBa9_akTuBHocTb)
тогда не выводит нужный результат

Наверное надо написать ORDER BY в запросе, который использует представление ?
24 авг 11, 10:38    [11169289]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить