Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Условие для данных / 6 сообщений из 6, страница 1 из 1
03.06.2020, 13:02
    #39965622
Necro666
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие для данных
Добрый день. Может кто подсказать, как правильно дописать условие?
код - 05цех - 2300склад - Р-1-12склад - М-1-3; код - 010цех - 2300склад - Р2-2
Теперь сам код:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
select rr.mesto
	from(
		select case when r.ceh = ttmr.ceh
				then 
					(select top 1 nssm_s 
						from nrmd 
						inner join prcr 
							on nrmd.kmat=prcr.kmatob and ttmr.CEH = prcr.CEH and prcr.PR_DO <> 'О'
						inner join prcrstor 
							on prcr.RCENTR=prcrstor.RCENTR 
						inner join ssm 
							on prcrstor.kssm = ssm.kssm and ssm.CEH=prcr.CEH and ssm.PR_DO <> 'О'
						WHERE r.nop = nrmd.nop and getdate() between nrmd.DATEFROM and nrmd.DATETO 
								and ttmz.ntechpr = nrmd.ntechpr and NRMD.KMATGP = TTMZ.KMATGP and nrmd.TIPNRM = '952'
						 )
					else 
						(select top 1 ssm.nssm_s
						from ssm
						inner join ssmk
							on ssm.kssm = ssmk.kssm and ssm.ceh = ssmk.ceh
								and ssmk.kmat = ttmz.kmatgp 
						where ssm.pr_do <>'О' and ssm.nssm_s like 'М%')
				end mesto
		from(
			select top 1 r.ceh, r.NOP
			from ttmr r
			where r.UNTTMZ=ttmr.UNTTMZ and getdate() between r.DATEFROM and r.DATETO 
				and r.nop > ttmr.nop
			order by r.nop
			) r
		)rr



Суть такова: если обратить внимание на "Цеха", то можно заметить, что они одинаковые (номер цеха берется и сравнивается из одной и той же таблицы), по первому условию получаем, если следующий цех равен текущему, тогда присваиваем ему место хранения (склад), иначе проверяем справочник, если детали нет, тогда ничего не ставим, если есть ставим склад "М". Т.е. тут все ок, но вот далее как раз и следует проблема, которую никак не решить, получается не то что нужно..скажем так.
Необходимо еще одно условие: Если текущий цех не равен следующему, тогда снова выполняем эти два условия из case
. Соответственно ставила что-то вроде
Код: plsql
1.
select case when r.ceh = ttmr.ceh or r.ceh != ttmr.ceh 

и тоже ничего, при таком условии не заполняются данные и для первого условия
Код: plsql
1.
r.ceh = ttmr.ceh

не выполняется тогда else
Помогите, пожалуйста разобраться
...
Рейтинг: 0 / 0
03.06.2020, 13:24
    #39965631
Necro666
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие для данных
В таком виде тоже пробовала

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
	select rr.mesto
	from(
		select case when r.ceh = ttmr.ceh 
				then 
					(select top 1 nssm_s 
						from nrmd 
						inner join prcr 
							on nrmd.kmat=prcr.kmatob and ttmr.CEH = prcr.CEH and prcr.PR_DO <> 'О'
						inner join prcrstor 
							on prcr.RCENTR=prcrstor.RCENTR 
						inner join ssm 
							on prcrstor.kssm = ssm.kssm and ssm.CEH=prcr.CEH and ssm.PR_DO <> 'О'
						WHERE r.nop = nrmd.nop and getdate() between nrmd.DATEFROM and nrmd.DATETO 
								and ttmz.ntechpr = nrmd.ntechpr and NRMD.KMATGP = TTMZ.KMATGP and nrmd.TIPNRM = '952'
						 )
					when r.ceh != ttmr.ceh 
				then 
					(select top 1 nssm_s 
						from nrmd 
						inner join prcr 
							on nrmd.kmat=prcr.kmatob and ttmr.CEH = prcr.CEH and prcr.PR_DO <> 'О'
						inner join prcrstor 
							on prcr.RCENTR=prcrstor.RCENTR 
						inner join ssm 
							on prcrstor.kssm = ssm.kssm and ssm.CEH=prcr.CEH and ssm.PR_DO <> 'О'
						WHERE r.nop = nrmd.nop and getdate() between nrmd.DATEFROM and nrmd.DATETO 
								and ttmz.ntechpr = nrmd.ntechpr and NRMD.KMATGP = TTMZ.KMATGP and nrmd.TIPNRM = '952'
						 )
					else 
						(select top 1 ssm.nssm_s
						from ssm
						inner join ssmk
							on ssm.kssm = ssmk.kssm and ssm.ceh = ssmk.ceh
								and ssmk.kmat = ttmz.kmatgp 
						where ssm.pr_do <>'О' and ssm.nssm_s like 'М%')
				end mesto
		from(
			select top 1 r.ceh, r.NOP
			from ttmr r
			where r.UNTTMZ=ttmr.UNTTMZ and getdate() between r.DATEFROM and r.DATETO 
				and r.nop > ttmr.nop
			order by r.nop
			) r
		)rr
...
Рейтинг: 0 / 0
03.06.2020, 13:39
    #39965643
Necro666
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие для данных
Вообще все фигня :D
Посетила мысль по поводу выполнения...скажет кто, на счет вложенного case? то есть
Код: plsql
1.
select case when exists(select case when …… then.....) else.....


Это вообще адекватно будет или нет?
...
Рейтинг: 0 / 0
03.06.2020, 13:55
    #39965653
Necro666
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие для данных
Necro666
Вообще все фигня :D
Посетила мысль по поводу выполнения...скажет кто, на счет вложенного case? то есть
Код: plsql
1.
select case when exists(select case when …… then.....) else.....


Это вообще адекватно будет или нет?



-----------

не какой-то бред выходит тоже
...
Рейтинг: 0 / 0
03.06.2020, 14:28
    #39965677
Necro666
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие для данных
еще вопрос, "под таким углом"...
Что можно использовать чтобы выполнялись then и else
...
Рейтинг: 0 / 0
03.06.2020, 15:07
    #39965717
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие для данных
Модератор: Извините, вынужден прервать этот нескончаемый поток сознания.
Как уже неоднократно вам писалось -- 22132722
Данный топик - не исключение, поэтому закрыто.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Условие для данных / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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