|
Помогите объяснить условие
|
|||
---|---|---|---|
#18+
Всем привет. select max(case when Name = 'LegalName' then StringValue end) as LegalName максимальное значение переменной LegalName которой присваивается строковой значение, правильно ил понимаю данное услвоие? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 18:02 |
|
Помогите объяснить условие
|
|||
---|---|---|---|
#18+
JoE113, выбрать максимальное среди всех значений StringValue. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 18:38 |
|
Помогите объяснить условие
|
|||
---|---|---|---|
#18+
JoE113, Ни какое максимальное значение здесь не ищется. Здесь точное сравнение на равенство, поэтому все найденные строки будут одинаковыми, как близнецы-братья. Здесь написано: Если значение поля Name равно 'LegalName', то вывести в этом месте значение поля StringValue, иначе null. max --> где-то дальше в этом запросе есть group by. Если group by нет, то max приведет к ошибке. Может быть, в этом месте max и не нужен? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 19:21 |
|
Помогите объяснить условие
|
|||
---|---|---|---|
#18+
Wlr-l, не вводите в заблуждение человека. для приведенного кода правильный ответ: "выбрать максимальное среди всех значений StringValue для Name = 'LegalName' " ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 19:37 |
|
Помогите объяснить условие
|
|||
---|---|---|---|
#18+
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' ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 21:16 |
|
Помогите объяснить условие
|
|||
---|---|---|---|
#18+
JoE113, Это альтернатива pivot-у ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2021, 07:30 |
|
Помогите объяснить условие
|
|||
---|---|---|---|
#18+
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. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2021, 09:33 |
|
Помогите объяснить условие
|
|||
---|---|---|---|
#18+
Вопрос был не в том, с какой целью используется это выражение, а что означает это выражение, какой результат оно вернёт. А ответы прозвучали о цели этого выражения. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2021, 10:38 |
|
Помогите объяснить условие
|
|||
---|---|---|---|
#18+
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.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2021, 12:07 |
|
Помогите объяснить условие
|
|||
---|---|---|---|
#18+
felix_ff, +1, это выражение не требует указание GROUP BY. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2021, 12:26 |
|
Помогите объяснить условие
|
|||
---|---|---|---|
#18+
Осталось посмотреть на полный запрос ТС и понять, что правильными ответами были "для поворота" и "альтернатива pivot-у". Но ни как не "выбрать максимальное среди всех значений StringValue" и "выбрать максимальное среди всех значений StringValue для Name = 'LegalName". ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2021, 12:44 |
|
Помогите объяснить условие
|
|||
---|---|---|---|
#18+
Wlr-l, почему же? Тема звучит так: "Помогите объяснить условие". Объяснение условия - это "выбрать максимальное среди всех значений StringValue для Name = 'LegalName' ". ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2021, 17:11 |
|
Помогите объяснить условие
|
|||
---|---|---|---|
#18+
Владислав Колосов, godsql и felix_ff каюсь, грешник я. На этом форуме у меня был очень сильный оппонент, с которым мы спорили до хрипоты об одном специфичном виде перекрестных запросов. С тех пор у меня развилась фобия, как только вижу 'агрегирующая функция(case' мне сразу начинают мерещиться перекрестные запросы. А здесь еще и текстовые значения агрегируются. Не смог поверить, что ТС именно в этом месте приведенного фрагмента запроса нужно именно максимальное значение среди всех текстовых значений StringValue. Спасибо вам всем большое, особенно felix_ffу, вы избавили меня от этой фобии. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2021, 15:56 |
|
Помогите объяснить условие
|
|||
---|---|---|---|
#18+
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.
И я вам даже больше скажу! Иногда, когда нужно, вообще не требуется! Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2021, 10:51 |
|
|
start [/forum/topic.php?fid=46&fpage=24&tid=1684690]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 10ms |
total: | 127ms |
0 / 0 |