TSQL: добавить строки в набор результатов "SELECT"
Мы используем SQL Server 2017 Express, и у меня есть этот оператор SELECT:
SELECT * FROM
(SELECT '' as ItemId, '-- Please select --' as ItemDesc
UNION
SELECT [id] as ItemId, [DisplayName] as ItemDesc
FROM [table]
) as t
ORDER BY
CASE ItemDesc
when '-- Please select --' then 1
when 'bla' then 2
when 'fasel' then 3
when 'blubb' then 4
when 'lala' then 5
when 'duh!' then 6
when 'spamalot' then 7
else 8
end, ItemDesc
Это работает, но мне нужно добавить вторую "статическую" строку в поз. 8, что-то вроде
SELECT * FROM
(SELECT '' as ItemId, '-- Please select --' as ItemDesc,
'' as ItemId, '----------' as ItemDesc
UNION
...
CASE ItemDesc
...
when '----------' then 8
else 9
Конечно, это не работает, но вы поняли. К сожалению, у меня нет доступа к коду, который создает список, все, что я мог сделать, это добавить Javascript в вывод.
Это как-то возможно? И имеет ли смысл делать это НЕ используя JS и манипулировать DOM?
2 ответа
Вам нужно добавить еще один union
:
SELECT t.*
FROM (SELECT '' as ItemId, '-- Please select --' as ItemDesc
UNION
SELECT '', '----------'
UNION
SELECT [id] , [DisplayName]
FROM [table]
) t
ORDER BY . . . ;
Добавьте новый столбец к каждому SELECT в вашем UNION, чтобы определить порядок сортировки, чтобы вам не пришлось возиться с CASE:
SELECT itemid, ItemDesc FROM
(
SELECT '' as ItemId, '-- Please select --' as ItemDesc, 0 as mysortcolumn
UNION
SELECT
[id] as ItemId,
[DisplayName] as ItemDesc,
CASE ItemDesc
when 'bla' then 1
when 'fasel' then 2
when 'blubb' then 3
when 'lala' then 4
when 'duh!' then 5
when 'spamalot' then 6
else 7 END as mysortcolumn
FROM [table]
UNION
SELECT '' as ItemId, '-- Please select --' as ItemDesc, 1000 as mysortcolumn
) as t
ORDER BY mysortcolumn asc;
НО... кажется, что вы пытаетесь создать пользовательский интерфейс в своем наборе записей. Вы уверены, что это место, где вы должны делать эту логику? Это очень громоздко для базы данных. Такое ощущение, что ты должен бежать, что ОДИН SELECT
заявление против [table]
с вашим заказом, а затем две начальные и конечные строки должны быть написаны вашим кодом, который создает пользовательский интерфейс (где бы эти данные не использовались).