Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как описать процесс.  [new]
Ohara
Member

Откуда:
Сообщений: 3
Ребята, у меня вопрос несложный.

Помогите, пожалуйста, описать пару функций. Что они выполняют.
Я понимаю вроде, но грамотно выразиться не получается))
Может быть, тут есть, кто поталантливее будет)

Вот эта строка.
select distinct n.code, f.year, f.month, case when ISNULL(n.potential ,ISNULL(ff.ob_fil, f.ob_format))=0 then ISNULL(ff.ob_fil, f.ob_format) else
ISNULL(n.potential ,ISNULL(ff.ob_fil, f.ob_format)) end
from FAS_temp_MM n


Так выглядит полностью запрос.

insert into FAS_temp_prog
select distinct n.code, f.year, f.month, case when ISNULL(n.potential ,ISNULL(ff.ob_fil, f.ob_format))=0 then ISNULL(ff.ob_fil, f.ob_format) else
ISNULL(n.potential ,ISNULL(ff.ob_fil, f.ob_format)) end
from FAS_temp_MM n

left join #ob_format f on f.format=n.format
left join #ob_fil ff on ff.filial=n.filial and ff.format=n.format and ff.year=f.year and ff.month=f.month
where not exists(select 1 from FAS_temp_prog fp where fp.code=n.code)



n.code - код
f.year - год
f.month - месяц.
FAS_temp_prog - таблица
ff.ob_fil, f.ob_format - временные таблицы.

Начало ещё могу объяснить:
Добавить новые строки в таблицу FAS_temp_prog, выбрав недвойные значения из столбцов код, год и месяц...

А вот дальше словесный ступор :(
23 май 14, 20:33    [16063694]     Ответить | Цитировать Сообщить модератору
 Re: Как описать процесс.  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Ohara
Ребята, у меня вопрос несложный.

Помогите, пожалуйста, описать пару функций. Что они выполняют.
Я понимаю вроде, но грамотно выразиться не получается))
Может быть, тут есть, кто поталантливее будет)

Выделенное.
 insert into FAS_temp_prog
 select distinct n.code, f.year, f.month, case when ISNULL(n.potential ,ISNULL(ff.ob_fil, f.ob_format))=0 then ISNULL(ff.ob_fil, f.ob_format) else
    ISNULL(n.potential ,ISNULL(ff.ob_fil, f.ob_format)) end
    from FAS_temp_MM n
    left join #ob_format f on f.format=n.format
    left join #ob_fil ff on ff.filial=n.filial and ff.format=n.format and ff.year=f.year and ff.month=f.month
    where not exists(select 1 from FAS_temp_prog fp where fp.code=n.code)

n.code - код
f.year - год
f.month - месяц.
FAS_temp_prog - таблица
ff.ob_fil, f.ob_format - временные таблицы.

Начало ещё могу объяснить:
Добавить новые строки в таблицу FAS_temp_prog, выбрав недвойные значения из столбцов код, год и месяц...

А вот дальше словесный ступор :(
Словесный ступор? Не думаю, это скорее полное непонимание что есть что.
Ту (на форуме для профессионалов) помогают понять, а не отмазаться от "зачётов".
Или докажите что я не прав.
23 май 14, 22:17    [16063995]     Ответить | Цитировать Сообщить модератору
 Re: Как описать процесс.  [new]
Ohara
Member

Откуда:
Сообщений: 3
Mnior, спасибо за предположение, но я уже как год закончила увиверситет)) никто не сомневается в профессионализме здесь собравшихся, и запись моя этому подтверждение)
Описание именно выделенной мной строки, хочу еще раз подчеркнуть, а не всего кода нужно мне, лично. Потому что я столкнулась с ситуацией, когда меня попросили описать, а получилось: "ну вот эта функция, когда вот эта функция при этом условии, но если его нет, то это условие и т.д..." Что на мой взгляд, как минимум, не очень понятно получилось, как максимум, повод с кем-то посоветоваться.
24 май 14, 19:35    [16065949]     Ответить | Цитировать Сообщить модератору
 Re: Как описать процесс.  [new]
igr_ok
Member

Откуда:
Сообщений: 170
Ohara,

Для начала присвойте алиас 4-му столбцу, а там, глядишь, и понимание придет.
24 май 14, 20:29    [16066162]     Ответить | Цитировать Сообщить модератору
 Re: Как описать процесс.  [new]
Ohara
Member

Откуда:
Сообщений: 3
igr_ok, case - это оператор, возвращающий одно из множества условий, а не столбец.
24 май 14, 21:00    [16066301]     Ответить | Цитировать Сообщить модератору
 Re: Как описать процесс.  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
case when ISNULL(n.potential ,ISNULL(ff.ob_fil, f.ob_format))=0 then ISNULL(ff.ob_fil, f.ob_format) else    ISNULL(n.potential ,ISNULL(ff.ob_fil, f.ob_format)) end
Заменяется на
case when coalesce(n.potential, ff.ob_fil, f.ob_format)=0 then coalesce(ff.ob_fil, f.ob_format) else coalesce(n.potential, ff.ob_fil, f.ob_format) end
И после, прочтения документации по case и coalsece, все легко описывается.
24 май 14, 21:12    [16066342]     Ответить | Цитировать Сообщить модератору
 Re: Как описать процесс.  [new]
Glory
Member

Откуда:
Сообщений: 104760
По-моему все гораздо проще и понятне так
case when n.potential=0 OR n.potential IS NULL then ISNULL(ff.ob_fil, f.ob_format) else n.potential end
25 май 14, 11:00    [16067654]     Ответить | Цитировать Сообщить модератору
 Re: Как описать процесс.  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
invm
ISNULL, coalsece
И у них разные свойства, а вдруг f.ob_format NOT NULL?!

Ohara
а получилось: "ну вот эта функция, когда вот эта функция при этом условии, но если его нет, то это условие и т.д...
"Что на мой взгляд, как минимум, не очень понятно получилось, как максимум, повод с кем-то посоветоваться.
Не верю. ©
25 май 14, 18:53    [16068834]     Ответить | Цитировать Сообщить модератору
 Re: Как описать процесс.  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
Mnior
а вдруг f.ob_format NOT NULL?!
В данном случае это не важно.
25 май 14, 20:11    [16069111]     Ответить | Цитировать Сообщить модератору
 Re: Как описать процесс.  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
invm
Mnior
а вдруг f.ob_format NOT NULL?!
В данном случае это не важно.
Т.к. LEFT JOIN
26 май 14, 09:32    [16071109]     Ответить | Цитировать Сообщить модератору
 Re: Как описать процесс.  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
Mnior
Т.к. LEFT JOIN
Как это влияет на результат?
26 май 14, 10:13    [16071408]     Ответить | Цитировать Сообщить модератору
 Re: Как описать процесс.  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
invm
Как это влияет на результат?
Тут другой вопрос "Могло ли это повлиять на процесс (что либо)?".
Да может! Метаданные могли придти как NOT NULL колонка (разве нет?), эти метаданные могли повлиять на логику приложения.
Или вы думаете что знаете все системы во всём мире?
Я кажу что я видел такую систему.

А то что было явно написано несколько IsNull подряд то меня навело на мысль что возможно это было сделано специально. Если бы не LEFT

+ код
USE tempdb
GO
CREATE TABLE [dbo].[Test1] (ID Int PRIMARY KEY, Value Int     NULL)
CREATE TABLE [dbo].[Test2] (ID Int PRIMARY KEY, Value Int NOT NULL)
GO
CREATE VIEW [dbo].[vwTest1] AS
SELECT	T1.ID
,	CASE WHEN T1.Value = 0 THEN IsNull(T1.Value,T2.Value) ELSE IsNull(T1.Value,T2.Value) END AS Value
FROM	dbo.Test1	T1
JOIN	dbo.Test2	T2 ON T1.ID = T2.ID
GO
CREATE VIEW [dbo].[vwTest2] AS
SELECT	T1.ID
,	CASE WHEN T1.Value = 0 THEN IsNull(T1.Value,T2.Value) ELSE Coalesce(T1.Value,T2.Value) END AS Value
FROM	dbo.Test1	T1 LEFT
JOIN	dbo.Test2	T2 ON T1.ID = T2.ID
GO
SELECT	ColumnProperty(Object_ID(N'dbo.vwTest1'),N'Value',N'AllowsNull')
,	ColumnProperty(Object_ID(N'dbo.vwTest2'),N'Value',N'AllowsNull')
GO
DROP VIEW dbo.vwTest2, dbo.vwTest1;
DROP TABLE dbo.Test2, dbo.Test1;


Кстати, чуть короче можно было написать:
Coalesce(NullIf(n.potential,0),ff.ob_fil,f.ob_format)
И понятнее.
26 май 14, 13:00    [16072847]     Ответить | Цитировать Сообщить модератору
 Re: Как описать процесс.  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
Mnior
Тут другой вопрос "Могло ли это повлиять на процесс (что либо)?".
Да может! Метаданные могли придти как NOT NULL колонка (разве нет?), эти метаданные могли повлиять на логику приложения.
У ТС insert в уже существующую таблицу и на ее метаданные никакого влияния не будет. Вот если бы было select ... into ..., тогда да.
26 май 14, 13:06    [16072919]     Ответить | Цитировать Сообщить модератору
 Re: Как описать процесс.  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
invm
У ТС insert в уже существующую таблицу
— Нечестная игра! Ты специально мои ходы плохо думал! ©
27 май 14, 00:05    [16076643]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить