"еще нужно прописать условия, так как не всегда берется первый символ..."
тогда не "UPPER(Left(name, 1))" , а
"SUBSTRING ( name, <Номер первого символа, который хотите>, <Количество символов сколько хотите>)"
типа SUBSTRING ( name, 1, 2)
Select
case
when <условие при котором надо брать 2 символа с начала строки> then
UPPER(Left(name, 2))
when <условие при котором надо брать 2 символа не с начала строки> then
SUBSTRING ( name, <Номер первого символа в строке>, <Количество символов>)
Например SUBSTRING ( name, 2, 2) -- вернет 2 и 3 символ
else
UPPER(Left(name, 1))
end
from
table1
Про "и иногда перый символ будет одинаковым с разных имен...." - непонял ... ну какбы это логично что инициалы у Ольги и Олега будут "О" ))
Select
case when name in ('rik','mike','john') then
UPPER(Left(name, 2))
else
UPPER(Left(name, 1))
end
case when name in ('rik','mike','john') then
UPPER(Left(name1, 2))
else
UPPER(Left(name1, 1))
end
case when name in ('rik','mike','john') then
UPPER(Left(name2, 2))
else
UPPER(Left(name2, 1))
end
from
table1
если делать так получается очень громоздко, полей name 10 штук, а условий около 50...
Ну если у тебя у строк поля типа
name = null, name1 = rik name2 = null
name = mike, name1 = null name2 = null
name = null , name1 = null name2 = john
Тогда подойдет так :
Select
case when COALESCE (name1, name2, …) in ('rik','mike','john') then
UPPER(Left(COALESCE (name1, name2, …), 2))
else
UPPER(Left(COALESCE (name1, name2, …), 1))
End
from
table1
Но это сработает только если у тебя в колонах Null ... COALESCE - вернет первое значение "Не Null"
а вообще, у тебя большие проблемы со структурой БД ...
поидее навер должно было быть несколько таблиц типа
nom -- Список номенклатуры
levels -- Таблица ярусов
Koefs -- Таблица коэффициентов
Тогда таблица sost имела бы всего 3 или 4 колонки ... и 3 соединения ... в результате получил бы тоже самое , но без подобных "Монструозных" конструкций ...
Реляционности в этой таблице - не много ...
в pg "unPivot" - вроде нет (но это не точно, я с pgsql не часто работаю)
Если поправить структуру, тогда и запросы будут лакончинее и быстрее, и места поменьше будет занимать ... а так ... похоже совсем красиво не получится ... но это совсем другая история
т.е. в текущей реализации "чтобы условия прописывались один раз для всех полей...." похоже не получится ...
только если Coalesce подойдет (попробуй можт там и впрям Null в пустых колонках) иначе для каждой придётся прописывать ...
Timur_gis_88, Поддерживаю Михаил Е Михаил Е "у тебя большие проблемы со структурой БД ..."
По хорошему если это список перекодирования, сделайте таблицку на пару полей и напишите функцию с перекодировкой. Тогда Ваши селекты обретут читабильный вид, и правка функции не приведет к рассинхрону во всех ваших полях