С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 04.03.2018
Сообщений: 13

Гибкость запроса SELECT

18.12.2018, 22:20. Показов 1101. Ответов 7

Студворк — интернет-сервис помощи студентам
Делаю БД в рамках учебного курса, возникло пару вопросов

SQL
1
2
3
4
5
SELECT CAST(Номер_личного_дела AS CHAR) + Фамилия + ' ' + Имя + ' ' + Отчество AS Заключённые,
       Рост,
       Вес
FROM Заключённые
WHERE Рост IS NULL OR Вес IS NULL;
Необходимо вывести всех заключённых, у которых не определён рост и/или вес

1) Проблема в том, что в таблице Заключённые не у всех есть отчество. Из-за этого в результате запроса выше имеются строки, в которых ни имени, ни фамилии, а просто NULL. Можно ли сделать, не разделяя ФИО на отдельные столбцы, чтобы в случае, если отчество не определено, то оно бы просто не добавлялось? Я пока слабо знаком с языком SQL, поэтому даже не знаю, что гуглить

2) Ещё один вопрос, это необязательно, но просто интересно. Можно ли каким-то образом получить два столбца: "Заключённые" и что-то типа "Необходимо измерить", чтобы в последнем были строки типа "Рост", "Вес", "Рост, вес" для соответствующих ситуаций: когда у заключённого не определён только рост, только вес или когда и Рост и Вес имеют NULL-значение? Как будет выглядеть такой запрос, если такое вообще возможно?

Ещё было бы интересно сделать, вот только сейчас пришло в голову, чтобы полученные строки выстроились в порядке убывания количества отсутствующих измерений, т.е. сначала те, у кого "Рост, вес", потом там, те у кого только "Рост", потом у кого только "Вес". Если кто-то знает, как такое реализовать, пожалуйста, подскажите, очень интересно

P.S.: В данном примере вообще не имеет значения, какое практическое применение это могло бы иметь. Просто я хочу познать функционал SQL. Эти вопросы возникли сразу, как только сел писать свой первый SELECT

Добавлено через 4 минуты
Кстати, между "CAST(Номер_личного_дела AS CHAR)" и "Фамилия" я не поставил пробел, потому что при формировании таблицы после кастованного числа автоматически ставится табуляция. С чем вообще это связано?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.12.2018, 22:20
Ответы с готовыми решениями:

Составление Select запроса
Здравствуйте. Подскажите как сделать так, что б для тех клиентов, у которых нет покупок выводился 0 а не NULL. -- Для каждого...

Поместить результат запроса select в массив
подскажите возможно ли поместить записи выбранные select в массив или хотя бы в разные переменные?

Использовать значения запроса SELECT в t-sql
Добрый день. Проблема такая. Мне нужно получить данные select'm а потом их далее использовать в триггере. С БД пока на Вы, а триггеры...

7
1 / 1 / 0
Регистрация: 16.10.2018
Сообщений: 16
19.12.2018, 09:14
Тип такого ?
T-SQL
1
2
3
4
5
    select nomer || surname || name || nvl(lastname,' '), 
    nvl(height,'необходимо измерить')рост,
    nvl(weight,'необходимо измерить')вес 
    from test_zakl
        where height is null or weight is null;
Миниатюры
Гибкость запроса SELECT  
1
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
19.12.2018, 10:32
Цитата Сообщение от Jendose Посмотреть сообщение
Кстати, между "CAST(Номер_личного_дела AS CHAR)" и "Фамилия" я не поставил пробел, потому что при формировании таблицы после кастованного числа автоматически ставится табуляция. С чем вообще это связано?
CHAR внутри функций CAST и CONVERT соответствует CHAR(30)
CHAR(n) отличается от VARCHAR(n) как раз тем, что строка дополняется пробелами до полной длины.

Добавлено через 13 минут
Цитата Сообщение от blvckvtvnv Посмотреть сообщение
Тип такого ?
select nomer || surname || name || nvl(lastname,' '),
nvl(height,'необходимо измерить')рост,
nvl(weight,'необходимо измерить')вес
from test_zakl
where height is null or weight is null;

1
Jendose, так вам нужен был ответ по Oracle? Вы ошиблись форумом.
1
0 / 0 / 0
Регистрация: 04.03.2018
Сообщений: 13
19.12.2018, 11:13  [ТС]
iap, нет, я не сразу понял, что это Oracle. А есть ли в MS SQL аналог NVL? (То есть в T-SQL, правильно ведь?)

Добавлено через 13 минут
Я нашёл аналог – IsNull. Всё получилось

SQL
1
2
3
4
5
SELECT CAST(Номер_личного_дела AS VARCHAR) + ' – ' + + Фамилия + ' ' + Имя + ' ' + IsNull(Отчество,'') AS Заключённые,
       Рост,
       Вес
FROM Заключённые
WHERE Рост IS NULL OR Вес IS NULL;
Так всё работает

Однако вариант ниже выдаёт ошибку

SQL
1
2
3
4
5
SELECT CAST(Номер_личного_дела AS VARCHAR) + ' – ' + + Фамилия + ' ' + Имя + ' ' + IsNull(Отчество,'') AS Заключённые,
       IsNull(Рост,'Необходимо измерить'),
       IsNull(Вес,'Необходимо измерить')
FROM Заключённые
WHERE Рост IS NULL OR Вес IS NULL;
Ошибка при преобразовании типа данных varchar к float. Кастить как-то?
0
1 / 1 / 0
Регистрация: 16.10.2018
Сообщений: 16
19.12.2018, 11:26
я думаю в ms sql дело в ковычках, попробуйте их убрать либо поставить двойные))

Добавлено через 35 секунд
Jendose, я думаю в ms sql дело в ковычках, попробуйте их убрать либо поставить двойные))

Добавлено через 8 минут
Jendose, или как то конвертировать
SQL
1
2
3
4
5
SELECT CAST(Номер_личного_дела AS VARCHAR) + ' – ' + + Фамилия + ' ' + Имя + ' ' + IsNull(Отчество,'') AS Заключённые,
       IsNull(Рост AS VARCHAR(25),'Необходимо измерить'),
       IsNull(Вес AS VARCHAR(25),'Необходимо измерить')
FROM Заключённые
WHERE Рост IS NULL OR Вес IS NULL;
Я сам новичок в sql, так могу ошибаться, и проверить не могу
0
0 / 0 / 0
Регистрация: 04.03.2018
Сообщений: 13
19.12.2018, 11:28  [ТС]
blvckvtvnv, не, строки в MS SQL заключаются в одинарные кавычки, а без кавычек это вообще непонятно что
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
19.12.2018, 11:29
Цитата Сообщение от Jendose Посмотреть сообщение
Ошибка при преобразовании типа данных varchar к float. Кастить как-то?
не путать теплое с мягким.

T-SQL
1
2
3
4
5
6
7
8
with cte as (
select null n
union all 
select 21.14
)
select 
ISNULL(cast(n as nvarchar(30)),'пусто')
 from cte
1
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
19.12.2018, 11:41
Цитата Сообщение от Jendose Посмотреть сообщение
Можно ли сделать, не разделяя ФИО на отдельные столбцы, чтобы в случае, если отчество не определено, то оно бы просто не добавлялось?
Цитата Сообщение от Jendose Посмотреть сообщение
чтобы полученные строки выстроились в порядке убывания количества отсутствующих измерений, т.е. сначала те, у кого "Рост, вес", потом там, те у кого только "Рост", потом у кого только "Вес"
T-SQL
1
2
3
4
5
6
7
8
9
10
11
SELECT CAST(Номер_личного_дела AS varchar(30)) + Фамилия + ' ' + Имя + isnull(' ' + Отчество, '') AS Заключённые,
       Рост,
       Вес
FROM Заключённые
order by
 case
  when Рост is not null and Вес is not null then 1
  when Рост is not null and Вес is null then 2
  when Рост is null and Вес is not null then 3
  else 4
 end;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.12.2018, 11:41
Помогаю со студенческими работами здесь

Блокируются ли при выполнении SELECT запроса записи в таблицах
Открываю ADODB.Connection, потом делаю SQL-SELECT к различным таблицам DBF, прикрепленным к MDB базе. Все установки по умолчанию. Кто...

Как вывести результат запроса select в txt-файл? (Transact-SQL)
Как вывести результат запроса select в txt-файл? (Transact-SQL)

Вытащить результат запроса SELECT COUNT(*) для дальнейшего использования в коде
Как вытащить результат запроса SELECT COUNT(*) для дальнейшего использования в коде C# ? SqlCommand thisCommand =...

гибкость SVG
Добрый день, столкнулся с необходимостью использовать SVG изображения для чертежей. И встал вопрос можно ли добится поддержки во всех...

Ошибка запроса SELECT
Доброй ночи Посылаю вот такой запрос: "SELECT * FROM hotel_name WHERE type=3,star=5,district=2" В ответ получаю ошибку: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru