TSQL Как упорядочить значения параметров с помощью "ALL" - PullRequest
0 голосов
/ 01 декабря 2011

Я занимаюсь разработкой отчета по SSRS 2008 и пытаюсь заставить один из моих сохраненных проков вывести «-All-», объединенный с другими возможными значениями этого параметра, где «-All-» появляется в качестве первого значения.Вместо этого «-Все-» сортируется в алфавитном порядке, поэтому «Адамс» указывается первым.Как мне сделать "-Все-" первым?(Обратите внимание, что этот параметр является уникальным идентификатором, поэтому я не могу сделать «-All-» = -1. Вот мой код T-SQL прямо сейчас:

Select NULL As [client_id], NULL AS [id_no], '-All-' As [full_name], '-All-' As [id_and_name]
UNION ALL
Select Distinct [people_id] AS [client_id], [id_no], [full_name], [full_name] + ' : ' + [id_no] AS [id_and_name]
From [evolv_cs].[dbo].[service_track_current_view] With (NoLock) 
Order By [full_name]

Когда я попробовал этот код:

Select NULL As [client_id], NULL AS [id_no], '-All-' As [full_name], '-All-' As [id_and_name]
UNION ALL
Select Distinct [people_id] AS [client_id], [id_no], [full_name], [full_name] + ' : ' + [id_no] AS [id_and_name]
From [evolv_cs].[dbo].[service_track_current_view] With (NoLock) 
Order By 
CASE [full_name] WHEN '-All-' THEN 0 ELSE 1 END,

[полное_имя]

Я получил эту ошибку:

Msg 207, Level 16, State 1, Line 6
Invalid column name 'full_name'.
Msg 104, Level 16, State 1, Line 6
ORDER BY items must appear in the select list if the statement contains a UNION, INTERSECT or EXCEPT operator.

Ответы [ 2 ]

1 голос
/ 01 декабря 2011

Если вы можете добавить столбец, то вы можете добавить 0 AS [sort_value] к первой части объединения и 1 AS [sort_value] ко второй части объединения.

Тогда просто Order By [sort_value],[full_name]

1 голос
/ 01 декабря 2011

Обновление
Оказывается, мы не можем использовать имена столбцов, которые мы присвоили в запросе, из условия ORDER BY.Этот обновленный код должен работать, однако:

SELECT * FROM (
    Select NULL As [client_id], NULL AS [id_no], '-All-' As [full_name], '-All-' As [id_and_name]
    UNION ALL
    Select Distinct [people_id] AS [client_id], [id_no], [full_name], [full_name] + ' : ' + [id_no] AS [id_and_name]
    From [evolv_cs].[dbo].[service_track_current_view] With (NoLock) 
)tbl
ORDER BY
    CASE [full_name] WHEN '-All-' THEN 0 ELSE 1 END,
    [full_name]

То есть вы сначала упорядочиваете, является ли значение -All-, и в этих двух группах вы упорядочиваете по фактическому значению.

...