Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 13.01.2021, 08:54   #1
Deimos_farm
Новичок
Джуниор
 
Регистрация: 13.01.2021
Сообщений: 2
Сообщение Нужна помошь от боле опытных пользователей sql

Таблица первая
Ряд 1 Ряд 2 Ряд 3
1 А 10
2 В 20
3 С 30

Я хочу создать представление, в котором будет логика:
Если Row2 = A, то:
Измените значение строки 2 с A на XYZ и выделите ему 50% строки 3, затем выделите оставшиеся 50% для строки ZZZ Row2.

Результат будет:

Ряд 1 Ряд 2 Ряд 3
1 XYZ 6
1 ZZZ 4
2 В 20
3 С 30

Последний раз редактировалось Deimos_farm; 13.01.2021 в 10:00.
Deimos_farm вне форума Ответить с цитированием
Старый 13.01.2021, 09:20   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,158
По умолчанию

1. одну строку(ЗАПИСЬ) превратить в две ?
причем это только для вполне определенного значения колонки(ПОЛЯ).
Код:
select t.col2, two.* from t 
left join ( select 1, 'A' as tp
      union select 2, 'A' 
          ) as two on two.tp =t.col2
2. замена 'A' на 'XYZ' ?
а что за СУБД?
Код:
MSSQL, FireBird --> case
Access -->iif
....
еще можно isnull
Код:
select 1, 'A' as tp, 'XYZ' as repl
union ...
Код:
select t.col2, isnull(two.repl, t.col2)
3.
Цитата:
выделите ему 40% строки 3
В SQL нет понятия номер строки(записи) есть только и исключительно ПОЛЯ их имена и значения.

40% поля3 в записи ГДЕ поле2 ='C' ???? ГДЕ поле1 =3 ???

4.
Цитата:
затем выделите оставшиеся 40%
вообще-то осталось у нас 60% (100-40).

Код:
select 1, 'A' as tp, 'XYZ' as repl, col3 *0.4 as val from t where col3 ='C'
union select 2, 'A', 'XYZ', col3 *0.6 from t where col3='C'
Мартин Губер. Понимание SQL.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 13.01.2021 в 09:31.
evg_m вне форума Ответить с цитированием
Старый 13.01.2021, 10:59   #3
Deimos_farm
Новичок
Джуниор
 
Регистрация: 13.01.2021
Сообщений: 2
По умолчанию

evg_m, а можно по просше я запутался
Deimos_farm вне форума Ответить с цитированием
Старый 13.01.2021, 11:25   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,158
По умолчанию

1.
Код:
select t.*, two.*
from t
left join ( select 1 as nn, 'A' as tp, 'XYZ' as repl, col3 *0.5 as val from t where col2 ='C'
      union select 2,       'A',       'XYZ',         col3 *0.5        from t where col2 ='C'
           ) as two on two.tp =t.col2
получили нужное число записей(строк)?...
получили для этих строк нужные значения (где-то /в каких-то полях) ?...

теперь осталось убрать лишнее ...
Код:
t.* two.* .., isnull(two.tp, t.col2), ...
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 13.01.2021 в 11:37.
evg_m вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме 20000 рублей в месяц
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь опытных программистов. Krivandr54 Помощь студентам 2 25.11.2013 19:18
Нужна консультация опытных. AshFlame Помощь студентам 1 26.09.2013 04:27
Нужна помошь MickeyMouse Помощь студентам 1 30.05.2010 20:33
Работа для опытных специалистов (SQL, Oracle) Работодатель Фриланс 1 31.03.2010 11:28


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS