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

Откуда:
Сообщений: 125
Добрый день!
Подскажите почему при сортировке, число 10 идет после 2?
Помогите пожалуйста решить


(select ASSIGNMENT, ASSIGNEE_NAME,
 CAST(AVG(DATEDIFF(MINUTE,  OPEN_TIME, INF_TOWORK_TIME))/1440 as VARCHAR(38)) +
 ':'+ CONVERT(VARCHAR, CAST(AVG(CAST(CAST (INF_TOWORK_TIME as datetime) - CAST( OPEN_TIME  as datetime)as float )) as datetime),108) AS TM
from [dbo].[PROBSUMMARYM1] P
INNER JOIN [dbo].[SCRELATIONM1] SC on P.[NUMBER] = SC.[SOURCE]
WHERE INF_TOWORK_TIME IS NOT NULL 
and ASSIGNMENT <> 'Группа операторов СД'
--and  OPEN_TIME >=  (@StartDate) and OPEN_TIME < ((@EndDate) + 1)
AND SC.TYPE = 'Escalate From'
AND ASSIGNMENT IS NOT NULL
--and OPEN_TIME <> INF_TOWORK_TIME
AND SC.[SOURCE] IS NOT NULL
GROUP BY ASSIGNMENT, ASSIGNEE_NAME
--ORDER BY TM DESC

UNION ALL

select ASSIGNED_GROUP, ASSIGNED_TO, 
 CAST(AVG(DATEDIFF(MINUTE,  SUBMIT_DATE, INF_TOWORK_TIME))/1440 as VARCHAR(38)) +
 ':'+ CONVERT(VARCHAR, CAST(AVG(CAST(CAST (INF_TOWORK_TIME as datetime) - CAST( SUBMIT_DATE  as datetime)as float )) as datetime),108) AS TM
from [dbo].[REQUESTM1] R
INNER JOIN [dbo].[SCRELATIONM1] SC on R.[NUMBER] = SC.[SOURCE]
WHERE INF_TOWORK_TIME IS NOT NULL 
and ASSIGNED_GROUP <> 'Группа операторов СД'
--and  SUBMIT_DATE >=  (@StartDate) and SUBMIT_DATE < ((@EndDate) + 1)
AND SC.TYPE = 'Escalate From'
AND ASSIGNED_GROUP IS NOT NULL
--and submit_date <> INF_TOWORK_TIME
AND SC.[SOURCE] IS NOT NULL
GROUP BY ASSIGNED_GROUP, ASSIGNED_TO)
ORDER BY 3 DESC


К сообщению приложен файл. Размер - 8Kb
8 июн 17, 14:27    [20550197]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
iap
Member

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

потому что строки сравниваются слева направо.
Ведь '2'>'1'. Значит, строка, начинающаяся с '2' больше строки, начинающейся с '1'.
8 июн 17, 14:29    [20550214]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
Владислав Колосов
Member

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

при сортировке строк идет посимвольное сравнение слева направо. Cимвол '2' находится выше символа '1'.
8 июн 17, 14:31    [20550223]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
Marin_1a
Member

Откуда:
Сообщений: 125
Владислав Колосов,

Можете подсказать как можно это решить,чтобы сортировка корректная?
8 июн 17, 14:33    [20550232]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20491
Отформатируйте время с ведущими нулями, и проблема отвалится.
8 июн 17, 14:34    [20550239]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
Marin_1a
Member

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

как это в практике выглядит?
Заранее благодарю!
8 июн 17, 14:35    [20550242]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
_human
Member

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

ИМХО, лучше сделайте поле с числом - общее к-во секунд или минут и по нему сортируйте
8 июн 17, 14:46    [20550293]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
Marin_1a
Member

Откуда:
Сообщений: 125
_human
Marin_1a,

ИМХО, лучше сделайте поле с числом - общее к-во секунд или минут и по нему сортируйте


делала через DATEDIFF, но тогда в GROUP BY придется указать эти начальные и конечные даты и логика пропадет, так как не будет группировки только по группе и имени


(select ASSIGNMENT, ASSIGNEE_NAME,
 CAST(AVG(DATEDIFF(MINUTE,  OPEN_TIME, INF_TOWORK_TIME))/1440 as VARCHAR(10)) +
 ':'+ CONVERT(VARCHAR, CAST(AVG(CAST(CAST (INF_TOWORK_TIME as datetime) - CAST( OPEN_TIME  as datetime)as float )) as datetime),108) AS TM,
 datediff(SECOND, OPEN_TIME , INF_TOACCEPT_TIME)
from [dbo].[PROBSUMMARYM1] P
INNER JOIN [dbo].[SCRELATIONM1] SC on P.[NUMBER] = SC.[SOURCE]
WHERE INF_TOWORK_TIME IS NOT NULL 
and ASSIGNMENT <> 'Группа операторов СД'
--and  OPEN_TIME >=  (@StartDate) and OPEN_TIME < ((@EndDate) + 1)
AND SC.TYPE = 'Escalate From'
AND ASSIGNMENT IS NOT NULL
--and OPEN_TIME <> INF_TOWORK_TIME
AND SC.[SOURCE] IS NOT NULL
GROUP BY ASSIGNMENT, ASSIGNEE_NAME, OPEN_TIME , INF_TOACCEPT_TIME



UNION ALL

select ASSIGNED_GROUP, ASSIGNED_TO, 
 CAST(AVG(DATEDIFF(MINUTE,  SUBMIT_DATE, INF_TOWORK_TIME))/1440 as VARCHAR(10)) +
 ':'+ CONVERT(VARCHAR, CAST(AVG(CAST(CAST (INF_TOWORK_TIME as datetime) - CAST( SUBMIT_DATE  as datetime)as float )) as datetime),108) AS TM,
 datediff(SECOND, SUBMIT_DATE, INF_TOACCEPT_TIME)
from [dbo].[REQUESTM1] R
INNER JOIN [dbo].[SCRELATIONM1] SC on R.[NUMBER] = SC.[SOURCE]
WHERE INF_TOWORK_TIME IS NOT NULL 
and ASSIGNED_GROUP <> 'Группа операторов СД'
--and  SUBMIT_DATE >=  (@StartDate) and SUBMIT_DATE < ((@EndDate) + 1)
AND SC.TYPE = 'Escalate From'
AND ASSIGNED_GROUP IS NOT NULL
--and submit_date <> INF_TOWORK_TIME
AND SC.[SOURCE] IS NOT NULL
GROUP BY ASSIGNED_GROUP, ASSIGNED_TO,  SUBMIT_DATE, INF_TOWORK_TIME)
ORDER BY 4 DESC
8 июн 17, 14:50    [20550304]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Marin_1a, Добавьте еще одну колонку с временем без конвертирования, сортируйте по ней, но не выводите ее.
8 июн 17, 14:57    [20550338]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7663
Не то, чтобы оптимизируемо, но можно на таком примере рассмотреть:
declare @t table (f1 varchar(10))
insert @t values ('20'),('31'),('21'),('3'),('10'),('2')

select f1 from @t order by f1 desc
select f1 from @t order by reverse(left(f1+space(10), 10)) desc


Вам вместо f1 придется вписать колбасу с датами. Ну или CTE применить для упрощения ситаксиса.
8 июн 17, 15:05    [20550380]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7663
Можно выровнять и к правой границе

select f1 from @t order by right(space(10) + f1, 10) desc


Но надо иметь в виду максимально возможную длину строки.
8 июн 17, 15:10    [20550401]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
Marin_1a
Member

Откуда:
Сообщений: 125
Всем огромное спасибо с разницей времени разобралась!

К другому отчету также делаю запрос и сортировку,но тут другие условия
Отчет должен сортировать по 2 колонке,от меньшего к большему
Что-то делаю не так...

SELECT
 AFFECTED_ITEM,
   Table1,
   Table2,
   Table3,
   Table4

FROM (

SELECT  'Table1' as Tab, AFFECTED_ITEM, Count(*) as AFFECTED_ITEMS from [dbo].[INCIDENTSM1]  
WHERE FOLDER ='EGK' 
group by AFFECTED_ITEM
UNION ALL
SELECT  'Table2' as Tab, AFFECTED_ITEM, Count(*) as AFFECTED_ITEMS from [dbo].[CM3RM1] 
WHERE FOLDER ='EGK' 
group by AFFECTED_ITEM
UNION ALL
SELECT  'Table3' as Tab, AFFECTED_ITEM, SUM(case when [SLA_BREACH]= 't' then 1 else 0 end ) as AFFECTED_ITEMS from [dbo].[INCIDENTSM1] 
WHERE AFFECTED_ITEM <> 'NULL' 
and fOLDER = 'EGK'
group by AFFECTED_ITEM
UNION ALL
SELECT  'Table4' as Tab, AFFECTED_ITEM, SUM(case when [SLA_BREACH]= 'f' then 1 else 0 end ) as AFFECTED_ITEMS from [dbo].[INCIDENTSM1] 
WHERE AFFECTED_ITEM <> 'NULL'  

and FOLDER = 'EGK'
group by AFFECTED_ITEM

) t
PIVOT (SUM(AFFECTED_ITEMS) FOR Tab IN (Table1,Table2,Table3,Table4)
)as p
order by 2 asc


К сообщению приложен файл. Размер - 10Kb
9 июн 17, 14:26    [20553287]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31331
Marin_1a
Всем огромное спасибо с разницей времени разобралась!

К другому отчету также делаю запрос и сортировку,но тут другие условия
Отчет должен сортировать по 2 колонке,от меньшего к большему
Что-то делаю не так...
Так вы показываете результат сортировки в какой то программе. Может, там своя сортировка?

Вы покажите результат запроса.

Сортировать ваш запрос должен по колонке Table1, т.е. по Count(*) from [dbo].[INCIDENTSM1]


PS Разумеется, вместо order by 2 asc нужно указать order by Table1 asc
Вот зачем это шифрование? Что бы путаться и считать колонки?
9 июн 17, 15:54    [20553583]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
Владислав Колосов
Member

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

order by 2 asc

У Вас-то в отчете это не вторая колонка.
9 июн 17, 16:25    [20553689]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7663
Тестовый Pivot сортирует по номеру колонки...
9 июн 17, 16:35    [20553720]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31331
Владислав Колосов
Тестовый Pivot сортирует по номеру колонки...
ИМХО ТС включил сортировку в самом отчёте, а там сортирует по строковому содержимому колонки.

Или реальный запрос для отчёта другой, с приведением к строке
10 июн 17, 01:31    [20554742]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
Marin_1a
Member

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

Здравствуйте!
Попробовала сделать order by Table1 asc,но результат остался таким же, я даже для order by Table1 desc проверяла,результат неизменным остается
10 июн 17, 17:03    [20555554]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
Marin_1a
Member

Откуда:
Сообщений: 125
Marin_1a
alexeyvg,

Здравствуйте!
Попробовала сделать order by Table1 asc,но результат остался таким же, я даже для order by Table1 desc проверяла,результат неизменным остается

все,проблему нашла.
Изменила MATRIX на Table
10 июн 17, 17:29    [20555581]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31331
Marin_1a
Marin_1a
alexeyvg,

Здравствуйте!
Попробовала сделать order by Table1 asc,но результат остался таким же, я даже для order by Table1 desc проверяла,результат неизменным остается

все,проблему нашла.
Изменила MATRIX на Table
Я и говорю, вы сортируете в клиенте, а вопрос задаёте про SQL-запрос
10 июн 17, 23:14    [20555926]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
Marin_1a
Member

Откуда:
Сообщений: 125
alexeyvg
Marin_1a
пропущено...

все,проблему нашла.
Изменила MATRIX на Table
Я и говорю, вы сортируете в клиенте, а вопрос задаёте про SQL-запрос


В этом случае сделала сортировку,но не получается сделать group by ASSIGNMENT....в чем загвоздка?
Table растягивает в длинное полотно,не группируя

select 
OpenedCount
,OpenedFailedCount
,OpenedSuccessCount
,ClosedFailedCount
,ClosedSuccessCount
,ClosedCount
,EssEntryCount
,EmailCount
,PhoneCount
,OpenedBefore
,OpenedAfter
,OpenedAfterNotSuspended
,OpenedAfterSuspended
,[OPEN_TIME]
,[CLOSE_TIME]
,OP.FULL_NAME as [ASSIGNEE]
,temp.[COMPANY]
,[AFFECTED_ITEM]
,[SLA_BREACH]
,[OPEN]
,[ESS_ENTRY]
,case 
when [CALLBACK_TYPE] = 'E-mail' then 'Электронная почта' 
when [CALLBACK_TYPE] = 'Telephone' then 'Телефон' 
when [CALLBACK_TYPE] = 'None' then 'Нет' 
else [CALLBACK_TYPE] end as [CALLBACK_TYPE]
,case
when [CATEGORY] = 'complaint' then 'Жалоба'
when [CATEGORY] = 'compliment' then 'Благодарность'
when [CATEGORY] = 'incident' then 'Инцидент'
when [CATEGORY] = 'problem' then 'Проблема'
when [CATEGORY] = 'request for administration' then 'Запрос администрирования'
when [CATEGORY] = 'request for change' then 'Запрос на изменение' 
when [CATEGORY] = 'request for information' then 'Запрос информации'
when [CATEGORY] = 'service catalog' then 'Каталог Услуг'
when [CATEGORY] = 'service request' then 'Запрос на обслуживание'
else [CATEGORY] end as [CATEGORY]
from
(

--Обращения, зарегистрированные за отчетный период

select
1 as OpenedCount
,case when [SLA_BREACH] = 't' then 1 else 0 end as OpenedFailedCount
,case when isnull([SLA_BREACH], 'f') = 'f' then 1 else 0 end as OpenedSuccessCount
,0 as ClosedFailedCount
,0 as ClosedSuccessCount
,0 as ClosedCount
,case when [ESS_ENTRY] = 't' then 1 else 0 end as EssEntryCount
,case when [DDC_FROM_EMAIL] = 't' then 1 else 0 end as EmailCount
,case when isnull([ESS_ENTRY], 'f') = 'f' and isnull([DDC_FROM_EMAIL], 'f') = 'f' then 1 else 0 end as PhoneCount
,0 as OpenedBefore
,0 as OpenedAfter
,0 as OpenedAfterNotSuspended
,0 as OpenedAfterSuspended
,[OPEN_TIME]
,[CLOSE_TIME]
,[CALLBACK_TYPE]
,[CATEGORY] 
,[ASSIGNEE]
,[COMPANY]
,[AFFECTED_ITEM]
,[SLA_BREACH]
,[OPEN]
,[ESS_ENTRY]
from [dbo].[INCIDENTSM1]
where
(OPEN_TIME >=  @StartDate and OPEN_TIME < @EndDate + 1)


union all

--Выполненные обращения за отчетный период

select
0 as OpenedCount
,0 as OpenedFailedCount
,0 as OpenedSuccessCount
,case when [SLA_BREACH] = 't' then 1 else 0 end as ClosedFailedCount
,case when isnull([SLA_BREACH], 'f') = 'f' then 1 else 0 end as ClosedSuccessCount
,1 as ClosedCount
,0 as EssEntryCount
,0 as EmailCount
,0 as PhoneCount
,0 as OpenedBefore
,0 as OpenedAfter
,0 as OpenedAfterNotSuspended
,0 as OpenedAfterSuspended
,[OPEN_TIME]
,[CLOSE_TIME]
,[CALLBACK_TYPE]
,[CATEGORY] 
,[ASSIGNEE]
,[COMPANY]
,[AFFECTED_ITEM]
,[SLA_BREACH]
,[OPEN]
,[ESS_ENTRY]
from [dbo].[INCIDENTSM1]
where
 
[DDC_RESOLVE_TIME] >= @StartDate and [DDC_RESOLVE_TIME] < @EndDate + 1

union all

--Открытые обращения на начало отчетного периода

select
0 as OpenedCount
,0 as OpenedFailedCount
,0 as OpenedSuccessCount
,0 as ClosedFailedCount
,0 as ClosedSuccessCount
,0 as ClosedCount
,0 as EssEntryCount
,0 as EmailCount
,0 as PhoneCount
,1 as OpenedBefore
,0 as OpenedAfter
,0 as OpenedAfterNotSuspended
,0 as OpenedAfterSuspended
,[OPEN_TIME]
,[CLOSE_TIME]
,[CALLBACK_TYPE]
,[CATEGORY] 
,[ASSIGNEE]
,[COMPANY]
,[AFFECTED_ITEM]
,[SLA_BREACH]
,[OPEN]
,[ESS_ENTRY]
from [dbo].[INCIDENTSM1]
where

[OPEN_TIME] < @StartDate and ([DDC_RESOLVE_TIME] > @StartDate or [DDC_RESOLVE_TIME] is null)


) as temp
left join [dbo].[OPERATORM1] as OP
ON temp.[ASSIGNEE] = OP.NAME

ORDER BY ClosedFailedCount


К сообщению приложен файл. Размер - 20Kb
11 июн 17, 08:51    [20556166]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31331
Marin_1a
В этом случае сделала сортировку,но не получается сделать group by ASSIGNMENT....в чем загвоздка?
Table растягивает в длинное полотно,не группируя
Вопрос про что, про программирование клиента, или про SQL Server?

Если про программирование клиента, то лучше задать вопрос в соотв. форуме.

Если про SQL Server, то я вообще не вижу в вашем запросе поля ASSIGNMENT.
И вообще, тогда лучше показывать результат запроса, который вы выполнили в SSMS, и описывать, что вам нужно в нём изменить, а не окошечко какой то неизвестной программы.
11 июн 17, 13:26    [20556506]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
Marin_1a
Member

Откуда:
Сообщений: 125
alexeyvg
Marin_1a
В этом случае сделала сортировку,но не получается сделать group by ASSIGNMENT....в чем загвоздка?
Table растягивает в длинное полотно,не группируя
Вопрос про что, про программирование клиента, или про SQL Server?

Если про программирование клиента, то лучше задать вопрос в соотв. форуме.

Если про SQL Server, то я вообще не вижу в вашем запросе поля ASSIGNMENT.
И вообще, тогда лучше показывать результат запроса, который вы выполнили в SSMS, и описывать, что вам нужно в нём изменить, а не окошечко какой то неизвестной программы.


в SQL Server
поле, по которому нужно группировать ASSIGNEE(выше с ошибкой указала) колонка Ответственный исполнитель.
Нужно сделать сортировку по полю ClosedFailedCount(колонка Выполнены с нарушением SLA), группируя при этом по ASSIGNEE.
Я не могу именно группировку сделать по ASSIGNEE
Пример того,как должен сортировать по убыванию,группируя тем временем по Исполнителю(ASSIGNEE) выделила желтым

К сообщению приложен файл. Размер - 13Kb
11 июн 17, 14:39    [20556594]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31331
Marin_1a
Я не могу именно группировку сделать по ASSIGNEE
Эээ, а GROUP BY temp.[ASSIGNEE] не прокатывает? Разумеется, добавив агрегатные функции по полям, которые нужно агрегировать, и убрав поля, которые не нужно ни агрегировать, ни выводить.
13 июн 17, 01:40    [20559249]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить