powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите объяснить условие
14 сообщений из 14, страница 1 из 1
Помогите объяснить условие
    #40071442
JoE113
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.
select max(case when Name = 'LegalName' then StringValue
end) as LegalName

максимальное значение переменной LegalName которой присваивается строковой значение, правильно ил понимаю данное услвоие?
...
Рейтинг: 0 / 0
Помогите объяснить условие
    #40071454
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JoE113,

выбрать максимальное среди всех значений StringValue.
...
Рейтинг: 0 / 0
Помогите объяснить условие
    #40071469
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JoE113,

Ни какое максимальное значение здесь не ищется. Здесь точное сравнение на равенство, поэтому все найденные строки будут одинаковыми, как близнецы-братья. Здесь написано:

Если значение поля Name равно 'LegalName', то вывести в этом месте значение поля StringValue, иначе null.

max --> где-то дальше в этом запросе есть group by.

Если group by нет, то max приведет к ошибке. Может быть, в этом месте max и не нужен?
...
Рейтинг: 0 / 0
Помогите объяснить условие
    #40071471
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Wlr-l,

не вводите в заблуждение человека.
для приведенного кода правильный ответ: "выбрать максимальное среди всех значений StringValue для Name = 'LegalName' "
...
Рейтинг: 0 / 0
Помогите объяснить условие
    #40071488
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
godsql,

В этом запросе есть "max(case when Name =", следовательно, в нем обязательно должна быть группировка group by Name,
т.е. сначала группируются строки с одинаковым Name.
Если в какой-то группе Name = 'LegalName', то да - в этой группе в этом поле будет max(StringValue),
в противном случае, так как else не задан, будет null.

Мы ничего не знаем о столбце Name, может быть, там находятся уникальные значения? Тогда для каждого значения из Name будет только одно значение StringValue. Если это так, то я не ввел ТС в заблуждение. Такой прием применяют для включения в запрос столбцов, по которым не хочется группировать, но они должны попасть в результат. Или для разворота.

"выбрать максимальное среди всех значений StringValue для Name = 'LegalName' ":

select max(StringValue)
from T
where Name = 'LegalName'
...
Рейтинг: 0 / 0
Помогите объяснить условие
    #40071553
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JoE113,

Это альтернатива pivot-у
...
Рейтинг: 0 / 0
Помогите объяснить условие
    #40071567
JoE113
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Wlr-l,

declare @tMoeTMC table ( vendorCode varchar(255)
,name varchar(255)
,price DECIMAL(18, 2)
,amount BIGINT
,summ decimal(18, 2));
insert @tMoeTMC
( vendorCode
,name
,price
,amount
,summ)
select max(case when Name = 'VendorCode' then StringValue END) as VendorCode
,max(case when Name = 'Name' then StringValue END) as [Name]
,convert(decimal(18, 2), max(case when Name = 'Price' then StringValue END)) as Price
,convert(BIGINT, max(case when Name = 'Amount' then StringValue END)) as Amount
,convert(decimal(18, 2), max(case when Name = 'Summ' then StringValue END)) as Summ
from util.parseJSON(@json)
where Parent_ID is not null and
Name is not null
group by Parent_ID;

весь запрос.
Я написал следующими слова: Далее происходит выборка, в условии которой указывается, если значение поля «Name» равно «VendorCode», то вывести для этого поля значение StringValue.
...
Рейтинг: 0 / 0
Помогите объяснить условие
    #40071579
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос был не в том, с какой целью используется это выражение, а что означает это выражение, какой результат оно вернёт. А ответы прозвучали о цели этого выражения.
...
Рейтинг: 0 / 0
Помогите объяснить условие
    #40071615
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max --> где-то дальше в этом запросе есть group by.
Wlr-l
godsql,

В этом запросе есть "max(case when Name =", следовательно, в нем обязательно должна быть группировка group by Name,
т.е. сначала группируются строки с одинаковым Name.
Если в какой-то группе Name = 'LegalName', то да - в этой группе в этом поле будет max(StringValue),
в противном случае, так как else не задан, будет null.

Мы ничего не знаем о столбце Name, может быть, там находятся уникальные значения? Тогда для каждого значения из Name будет только одно значение StringValue. Если это так, то я не ввел ТС в заблуждение. Такой прием применяют для включения в запрос столбцов, по которым не хочется группировать, но они должны попасть в результат. Или для разворота.

"выбрать максимальное среди всех значений StringValue для Name = 'LegalName' ":

select max(StringValue)
from T
where Name = 'LegalName'


ошибочное мнение.

Код: sql
1.
2.
3.
4.
declare @t table (name varchar(255), stringvalue varchar(255));
insert into @t values ('Vasya', 'a'), ('Vasya', 'b'), ('Vasya', 'c'), ('LegalName', '100500'), ('LegalName', 'blablabla'), ('LegalName', 'ululu')

select max(case when [name] = 'LegalName' then stringvalue end) from @t
...
Рейтинг: 0 / 0
Помогите объяснить условие
    #40071626
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff,

+1, это выражение не требует указание GROUP BY.
...
Рейтинг: 0 / 0
Помогите объяснить условие
    #40071633
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Осталось посмотреть на полный запрос ТС и понять, что правильными ответами были "для поворота" и "альтернатива pivot-у".

Но ни как не "выбрать максимальное среди всех значений StringValue" и "выбрать максимальное среди всех значений StringValue для Name = 'LegalName".
...
Рейтинг: 0 / 0
Помогите объяснить условие
    #40071744
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wlr-l,

почему же? Тема звучит так: "Помогите объяснить условие".
Объяснение условия - это "выбрать максимальное среди всех значений StringValue для Name = 'LegalName' ".
...
Рейтинг: 0 / 0
Помогите объяснить условие
    #40071966
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов, godsql и felix_ff каюсь, грешник я.

На этом форуме у меня был очень сильный оппонент, с которым мы спорили до хрипоты об одном специфичном виде перекрестных запросов. С тех пор у меня развилась фобия, как только вижу 'агрегирующая функция(case' мне сразу начинают мерещиться перекрестные запросы. А здесь еще и текстовые значения агрегируются. Не смог поверить, что ТС именно в этом месте приведенного фрагмента запроса нужно именно максимальное значение среди всех текстовых значений StringValue.

Спасибо вам всем большое, особенно felix_ffу, вы избавили меня от этой фобии.
...
Рейтинг: 0 / 0
Помогите объяснить условие
    #40072143
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff
max --> где-то дальше в этом запросе есть group by.

Wlr-l
godsql,

В этом запросе есть "max(case when Name =", следовательно, в нем обязательно должна быть группировка group by Name,
т.е. сначала группируются строки с одинаковым Name.
Если в какой-то группе Name = 'LegalName', то да - в этой группе в этом поле будет max(StringValue),
в противном случае, так как else не задан, будет null.

Мы ничего не знаем о столбце Name, может быть, там находятся уникальные значения? Тогда для каждого значения из Name будет только одно значение StringValue. Если это так, то я не ввел ТС в заблуждение. Такой прием применяют для включения в запрос столбцов, по которым не хочется группировать, но они должны попасть в результат. Или для разворота.

"выбрать максимальное среди всех значений StringValue для Name = 'LegalName' ":

select max(StringValue)
from T
where Name = 'LegalName'


ошибочное мнение.

Код: sql
1.
2.
3.
4.
declare @t table (name varchar(255), stringvalue varchar(255));
insert into @t values ('Vasya', 'a'), ('Vasya', 'b'), ('Vasya', 'c'), ('LegalName', '100500'), ('LegalName', 'blablabla'), ('LegalName', 'ululu')

select max(case when [name] = 'LegalName' then stringvalue end) from @t



И я вам даже больше скажу!
Иногда, когда нужно, вообще не требуется!

Код: sql
1.
2.
3.
4.
declare @t table (name varchar(255), stringvalue varchar(255));
insert into @t values ('Vasya', 'a'), ('Vasya', 'b'), ('Vasya', 'c'), ('LegalName', '100500'), ('LegalName', 'blablabla'), ('LegalName', 'ululu')

select *, max(case when [name] = 'LegalName' then stringvalue end) over () from @t
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите объяснить условие
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]