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

Откуда:
Сообщений: 298
Имеется таблица:
id_ttitlestart
1Новости5.0
2Телеканал "Доброе утро"5.5
3Новости9.0
4Контрольная закупка9.20
5Жить здорово!9.50
6Модный приговор10.55
7Новости с субтитрами12.00
8ЖКХ12.20
9Детективы13.20
10Другие новости14.00
11Понять. Простить14.20
12Новости с субтитрами15.00

Хочу сгруппировать одинаковые названия так:
titledatestart
Новости2011-08-29 00:00:005.0, 9.0, 3.0,
Другие новости2011-08-29 00:00:0014.0,
Понять. Простить2011-08-29 00:00:0014.20,
Время2011-08-29 00:00:0021.0,
Телеканал "Доброе утро"2011-08-29 00:00:005.5,
Контрольная закупка2011-08-29 00:00:009.20,
Жить здорово!2011-08-29 00:00:009.50,
Модный приговор2011-08-29 00:00:0010.55,
Новости с субтитрами2011-08-29 00:00:0012.0, 15.0,

Делаю это так:
SELECT  channel, title,DATE, [Старт]= ( select  (DATENAME (HH ,start ))+ '.'+ (DATENAME (MINUTE ,start  ))+ ', '  from tv  where title like '%%' 
and cast(date as varchar) like '%авг 29 2011%'
and title=t.[title] and date=t.[date] for xml path('') ),
[ID]= ( select cast(id_tv as varchar)+ ', '  from tv  where title like '%%' 
and cast(date as varchar) like '%авг 29 2011%'
and title=t.[title] and date=t.[date] for xml path('') )

from dbo.tv t 
  where  cast(date as varchar) like '%авг 29 2011%'
AND title like '%%' 
group by title,channel,date
--order by channel, date, Старт
order by id
Но немогу отсортировать по первоначальному id_t.
Сортировка по группированному id такая (начальный id_t):
id
1, 3, 25,
10,
11,
13, 27,
14,
15,
16,
17,
18,
19,
2,
20,
21,
22,
23,
24,
26,
4,
5,
6,
7, 12,
8,
9,

Как сделать, чтобы сортировка была такой:
id
1, 3, 25,
2,
4,
5,
6,
7, 12,
8,
9,
10,
11,
13, 27,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
26,
5 сен 11, 16:23    [11229694]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка по id с группировкой  [new]
iljy
Member

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

order by min(id_t)
5 сен 11, 16:35    [11229822]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка по id с группировкой  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Так?
SET NOCOUNT ON;
USE tempdb;

DECLARE @T TABLE(id INT, title VARCHAR(100), start TIME(0));
INSERT @T(id, title, start) VALUES
 (1,'Новости','5:0')
,(2,'Телеканал "Доброе утро"','5:5')
,(3,'Новости','9:0')
,(4,'Контрольная закупка','9:20')
,(5,'Жить здорово!','9:50')
,(6,'Модный приговор','10:55')
,(7,'Новости с субтитрами','12:00')
,(8,'ЖКХ','12:20')
,(9,'Детективы','13:20')
,(10,'Другие новости','14:00')
,(11,'Понять: Простить','14:20')
,(12,'Новости с субтитрами','15:00');

SELECT T.title,
STUFF
(
 (
  SELECT ', '+CONVERT(CHAR(5),start,8)
  FROM @T TT
  WHERE TT.title=T.title
  ORDER BY TT.start
  FOR XML PATH(''),
  TYPE
 ).value('text()[1]','VARCHAR(100)')
 ,1,2,''
)
FROM @T T
GROUP BY T.title
ORDER BY MIN(start);
5 сен 11, 16:37    [11229848]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка по id с группировкой  [new]
Scend
Member

Откуда:
Сообщений: 298
iap,
вариант с ORDER BY MIN(start); подходит для той части таблицы, но для всей таблицы не подходит.
Вот полная таблица:
id_ttitlestart
1Новости05:00
2Телеканал "Доброе утро"05:05
3Новости09:00
4Контрольная закупка09:20
5Жить здорово!09:50
6Модный приговор10:55
7Новости с субтитрами12:00
8ЖКХ12:20
9Детективы13:20
10Другие новости14:00
11Понять. Простить14:20
12Новости с субтитрами15:00
13"Хочу знать" с Михаилом Ширвиндтом15:25
14Обручальное кольцо15:55
15Премьера сезона. "Свобода и справедливость" с Андреем Макаровым16:55
16Вечерние новости с субтитрами18:00
17Давай поженимся!18:45
18"Пусть говорят" с Андреем Малаховым19:50
19Время21:00
20Новая комедия "Немного не в себе"21:30
21Премьера сезона. "Товарищи полицейские"22:30
22Премьера. "Иван Охлобыстин. Поп-звезда"23:25
23Ночные новости00:30
24Шакал00:50
25Новости03:00
26Идиократия03:05
27"Хочу знать" с Михаилом Ширвиндтом04:25

с ORDER BY MIN(start); id_t выстраиваются так:
23,
24,
1, 3, 25,
26,
13, 27,
2,
4,
5,
6,
7, 12,
8,
9,
10,
11,
14,
15,
16,
17,
18,
19,
20,
21,
22,

А хотелось бы так:
1, 3, 25,
2,
4,
5,
6,
7, 12,
8,
9,
10,
11,
13, 27,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
26,
5 сен 11, 16:59    [11230035]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка по id с группировкой  [new]
Scend
Member

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

order by min(id_t)

Кажется это подходит...
5 сен 11, 17:07    [11230110]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка по id с группировкой  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Scend
iljy
Scend,

order by min(id_t)

Кажется это подходит...
Подозреваю, id_t не несёт никакого смысла, кроме точной идентификации записей.
А вот start имеет вполне определённый смысл возрастающего Времени!

Не понимаю, зачем по id сортировать?
5 сен 11, 17:13    [11230163]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка по id с группировкой  [new]
Scend
Member

Откуда:
Сообщений: 298
iap
Scend
пропущено...

Кажется это подходит...
Подозреваю, id_t не несёт никакого смысла, кроме точной идентификации записей.
А вот start имеет вполне определённый смысл возрастающего Времени!

Не понимаю, зачем по id сортировать?

Тут есть небольшая тонкость, связанная с переходом дня на новый день- с 23.59 на 00.00.
Т.е. 05.00 ... 23.59 - это 29 авг, а 00.30 ... 04.25 уже 30 авг. Поэтому сортировка по start перемешает дни, а они должны быть отсортированы.
id помогает это отсортировать.
Тут, видимо, не хватает поля datetime, по которому можно было сортировать. Вместо него тут поле time(start).
5 сен 11, 17:27    [11230274]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка по id с группировкой  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Scend
iap
пропущено...
Подозреваю, id_t не несёт никакого смысла, кроме точной идентификации записей.
А вот start имеет вполне определённый смысл возрастающего Времени!

Не понимаю, зачем по id сортировать?

Тут есть небольшая тонкость, связанная с переходом дня на новый день- с 23.59 на 00.00.
Т.е. 05.00 ... 23.59 - это 29 авг, а 00.30 ... 04.25 уже 30 авг. Поэтому сортировка по start перемешает дни, а они должны быть отсортированы.
id помогает это отсортировать.
Тут, видимо, не хватает поля datetime, по которому можно было сортировать. Вместо него тут поле time(start).
Ну, если присмотреться к первому посту, то есть-таки поле [Date]
5 сен 11, 17:46    [11230443]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка по id с группировкой  [new]
Scend
Member

Откуда:
Сообщений: 298
iap
Scend
пропущено...

Тут есть небольшая тонкость, связанная с переходом дня на новый день- с 23.59 на 00.00.
Т.е. 05.00 ... 23.59 - это 29 авг, а 00.30 ... 04.25 уже 30 авг. Поэтому сортировка по start перемешает дни, а они должны быть отсортированы.
id помогает это отсортировать.
Тут, видимо, не хватает поля datetime, по которому можно было сортировать. Вместо него тут поле time(start).
Ну, если присмотреться к первому посту, то есть-таки поле [Date]

Эта вторая тонкость. Таблица с колонкой даты будет такая:
1Новости29/08/11 05:00
2Телеканал "Доброе утро"29/08/11 05:05
3Новости29/08/11 09:00
4Контрольная закупка29/08/11 09:20
5Жить здорово!29/08/11 09:50
6Модный приговор29/08/11 10:55
7Новости с субтитрами29/08/11 12:00
8ЖКХ29/08/11 12:20
9Детективы29/08/11 13:20
10Другие новости29/08/11 14:00
11Понять. Простить29/08/11 14:20
12Новости с субтитрами29/08/11 15:00
13"Хочу знать" с Михаилом Ширвиндтом29/08/11 15:25
14Обручальное кольцо29/08/11 15:55
15Премьера сезона. "Свобода и справедливость" с Андреем Макаровым29/08/11 16:55
16Вечерние новости с субтитрами29/08/11 18:00
17Давай поженимся!29/08/11 18:45
18"Пусть говорят" с Андреем Малаховым29/08/11 19:50
19Время29/08/11 21:00
20Новая комедия "Немного не в себе"29/08/11 21:30
21Премьера сезона. "Товарищи полицейские"29/08/11 22:30
22Премьера. "Иван Охлобыстин. Поп-звезда"29/08/11 23:25
23Ночные новости29/08/11 00:30
24Шакал29/08/11 00:50
25Новости29/08/11 03:00
26Идиократия29/08/11 03:05
27"Хочу знать" с Михаилом Ширвиндтом29/08/11 04:25
5 сен 11, 22:32    [11231376]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка по id с группировкой  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Scend, что значит будет такая? Она так хранится или так выводится? Если именно так хранится - то это совершенно не правильно.

* Хотя в любом случае это не помеха группировке/сортировке:
DECLARE @str VARCHAR(10)='29/08/11'
SELECT CAST('20'+PARSENAME(REPLACE(@str,'/','.'),1)+PARSENAME(REPLACE(@str,'/','.'),2)+PARSENAME(REPLACE(@str,'/','.'),3) AS DATETIME)
5 сен 11, 23:29    [11231613]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка по id с группировкой  [new]
Scend
Member

Откуда:
Сообщений: 298
Подскажите, а как убрать первый нолик в этой колонке?
[Старт2]= stuff(( select ', ' +   CONVERT(CHAR(5),start,8)  from tv  where title like '%%' 
and CONVERT(CHAR(11),date,20) like '%2011-08-29%'
and title=t.[title] and date=t.[date] for xml path('') ),1,2,'')
19:50
15:25, 04:25
18:00
21:00
18:45
13:20
14:00
09:50
12:20
03:05
09:20
10:55
21:30
05:00, 09:00, 03:00
12:00, 15:00
00:30
15:55
14:20
16:55
22:30
23:25
05:05
00:50

Вот на такое:
19.50
15.25, 4:25
18.00
21.00
18.45
13.20
14.00
9.50
12.20
3.05
9.20
10.55
21.30
5.00, 9.00, 3.00
12.00, 15.00
0.30
15.55
14.20
16.55
22.30
23.25
5.05
0.50

Двоеточие я поменял на точку с помощью Replace.
6 сен 11, 11:36    [11233022]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка по id с группировкой  [new]
iap
Member

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

например:
REPLACE('_'+CONVERT(CHAR(5),start,8),'_0','')
6 сен 11, 11:52    [11233156]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка по id с группировкой  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iap
Scend,

например:
REPLACE('_'+CONVERT(CHAR(5),start,8),'_0','')
Ошибся:
STUFF(REPLACE('_'+CONVERT(CHAR(5),start,8),'_0','_'),1,1,'')
6 сен 11, 11:56    [11233188]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка по id с группировкой  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Или
REPLACE(REPLACE('_'+CONVERT(CHAR(5),start,8),'_0','_'),'_','')
6 сен 11, 11:57    [11233203]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка по id с группировкой  [new]
Scend
Member

Откуда:
Сообщений: 298
iap,спасибо!
t-sql рулит! )
6 сен 11, 12:10    [11233323]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка по id с группировкой  [new]
Scend
Member

Откуда:
Сообщений: 298
В предыдущем примере сделал вывод колонки с временем по другому:
[Старт2]= stuff(( select ', ' +   (DATENAME (HH ,start ))+ '.'+ (DATENAME (MINUTE, start  ))  from tv  where title like '%%' 
and CONVERT(CHAR(11),date,20) like '%2011-08-29%'
and title=t.[title] and date=t.[date] for xml path('') ),1,2,'')
Колонка выводится так:
19.50
15.25, 4.25
18.0
21.0
18.45
13.20
14.0
9.50
12.20
3.5
9.20
10.55
21.30
5.0, 9.0, 3.0
12.0, 15.0
0.30
15.55
14.20
16.55
22.30
23.25
5.5
0.50

С часами все нормально, но вот минуты... Как минуты вывести в двухзначном формате, в примере 0, как 00, 5, как 05 и т.п.
Никак не нашел как подставить для минут ##.
19.50
15.25, 4.25
18.00
21.00
18.45
13.20
14.00
9.50
12.20
3.05
9.20
10.55
21.30
5.00, 9.00, 3.00
12.00, 15.00
0.30
15.55
14.20
16.55
22.30
23.25
5.05
0.50
6 сен 11, 13:17    [11233949]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка по id с группировкой  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Scend, зачем это?
CONVERT(CHAR(11),date,20) like '%2011-08-29%'
Не надобно так писать.

Для часов/минут:
DECLARE @tm VARCHAR(5)='00:00'
SELECT CASE WHEN CHARINDEX('0',@tm,1)=1 THEN RIGHT(@tm,LEN(@tm)-1) ELSE @tm END
6 сен 11, 15:07    [11235037]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить