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

Откуда:
Сообщений: 783
Добрый день, уважаемые форумчане!

Возникла проблема с сортировкой в запросах с объединением.
Есть запрос следующего вида:
rst.Open "SELECT  (convert(nvarchar,dbo.val_op_cont.op_sysdate,108)) as op_sysdate, dbo.oper_type.op_type_txt, dbo.val_op_cont.SotrCod, " & _
                                "dbo.val_op_cont.op_rate, dbo.req_cur1.cur_mcode as cur_mcode_inp, " & _
                                "replace(convert(nvarchar,dbo.val_op_cont.op_in_sum,1),',',' ') AS op_in_sum, dbo.req_curr.cur_mcode as cur_mcode_out, " & _
                                "replace(convert(nvarchar,dbo.val_op_cont.op_out_sum,1),',',' ') AS op_out_sum, dbo.val_op_cont.op_old, " & _
                             " FROM dbo.req_curr INNER JOIN (dbo.req_cur1 INNER JOIN (dbo.oper_type INNER JOIN dbo.val_op_cont " & _
                                   "ON dbo.oper_type.op_code = dbo.val_op_cont.op_type) " & _
                                    "ON dbo.req_cur1.cur_code = dbo.val_op_cont.op_in_val) " & _
                                    "ON dbo.req_curr.cur_code = dbo.val_op_cont.op_out_val " & _
                            "Wheredbo.val_op_cont.op_sysdate > '" & op_dat & "' " & _
                                " AND (dbo.val_op_cont.op_old='' or dbo.val_op_cont.op_old is null) " & _
                                "AND dbo.val_op_cont.win_code='0000' " & _
                    " Union " & _
                            "SELECT  (convert(nvarchar,dbo.val_op_cont.op_sysdate,108)) as op_sysdate, dbo.oper_type.op_type_txt, dbo.val_op_cont.SotrCod, " & _
                                "dbo.val_op_cont.op_rate, dbo.req_cur1.cur_mcode as cur_mcode_inp, " & _
                                "replace(convert(nvarchar,dbo.val_op_cont.op_in_sum,1),',',' ') AS op_in_sum, dbo.req_curr.cur_mcode as cur_mcode_out, " & _
                                "replace(convert(nvarchar,dbo.val_op_cont.op_out_sum,1),',',' ') AS op_out_sum, dbo.val_op_cont.op_old, " & _
                            " FROM dbo.req_curr INNER JOIN (dbo.req_cur1 INNER JOIN (dbo.oper_type INNER JOIN dbo.val_op_cont_arch " & _
                                "ON dbo.oper_type.op_code = dbo.val_op_cont_arch.op_type) " & _
                                "ON dbo.req_cur1.cur_code = dbo.val_op_cont_arch.op_in_val) " & _
                                "ON dbo.req_curr.cur_code = dbo.val_op_cont_arch.op_out_val " & _
                            "Where dbo.val_op_cont.op_sysdate > '" & op_dat & "' " & _
                                " AND (dbo.val_op_cont.op_old='' or dbo.val_op_cont.op_old is null) " & _
                                "AND dbo.val_op_cont.win_code='0000' " & _
                            strSqlOrderBy, _
                    Cn, adOpenStatic, adLockReadOnly


Порядок сортировки задается переменной (по какой колонке в форме пользователь кликнул, по такой и сортируем). Но есть два поля которые в запросе преобразуются для более читабельного вида пользователю
replace(convert(nvarchar,dbo.val_op_cont.op_in_sum,1),',',' ') AS op_in_sum

и
replace(convert(nvarchar,dbo.val_op_cont.op_out_sum,1),',',' ') AS op_out_sum

Если мне надо выполнить сортировку по этим полям, то сортировка работает уже по преобразованным полям и Получается криво. Как можно обойти это и выполнить сортировку по еще не преобразованным полям?
24 май 13, 12:05    [14343857]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с сочетанием в запросе CAST, UNION и ORDER BY  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
включить в SELECT еще и то, по чему нужно сортировать
а на юзеру не показывать :)
24 май 13, 12:07    [14343877]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с сочетанием в запросе CAST, UNION и ORDER BY  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alex_men
Как можно обойти это и выполнить сортировку по еще не преобразованным полям?

Указать в strSqlOrderBy эти самые "непреобразованные поля"
24 май 13, 12:07    [14343885]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с сочетанием в запросе CAST, UNION и ORDER BY  [new]
Alex_men
Member

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

Я так и делаю, но RODER BY при UNION работает уже по результату объединения, и получается если указываю имя поля например op_in_sum, то получаю ответ что такого поля нет, если по псевдониму op_in_sumF (я кстати когда тут писал ошибочку сделал преобразование идет так:
replace(convert(nvarchar,dbo.val_op_cont.op_in_sum,1),',',' ') AS op_in_sumF
) то сортировка кривая.
24 май 13, 12:14    [14343937]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с сочетанием в запросе CAST, UNION и ORDER BY  [new]
Alex_men
Member

Откуда:
Сообщений: 783
Паганель,
дополнительное поле без преобразования. Хм сейчас попробую
24 май 13, 12:15    [14343945]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с сочетанием в запросе CAST, UNION и ORDER BY  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alex_men
Я так и делаю, но RODER BY при UNION работает уже по результату объединения,

Потому что вычисляемое поле имеет такое же имя как и поле таблицы
24 май 13, 12:15    [14343947]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с сочетанием в запросе CAST, UNION и ORDER BY  [new]
Alex_men
Member

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

ORDER BY не видит что происходит в SELECT после UNION. Он видит только результат UNION.
24 май 13, 12:43    [14344253]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с сочетанием в запросе CAST, UNION и ORDER BY  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alex_men
ORDER BY не видит что происходит в SELECT после UNION. Он видит только результат UNION.

ORDER BY не видит полей, которых нет в наборе
24 май 13, 12:47    [14344292]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с сочетанием в запросе CAST, UNION и ORDER BY  [new]
Alex_men
Member

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

Спасибо помогло :) как это я сам не догадался. Спасибо всем, И ХОРОШИХ ВЫХОДНЫХ!
24 май 13, 12:50    [14344326]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить