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

Откуда:
Сообщений: 15
Привет. Как пример, есть 2 строки.В них описывается одинаковый товар с 2 складов. Как сделать если в одном складе значение 0, то и во вторую строчку с другим названием склада добавилось бы значение 0.
На примере если в складе 'Pakavimo t' Poreikis='0' то в складе 'Pakavimo' нужен результат тоже Poreikis='0' или можно эти значения в другом столбике записать.

Пример прикреплён

К сообщению приложен файл. Размер - 16Kb
10 янв 18, 12:28    [21092973]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на проверку строк  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20529
UPDATE таблица 
SET количество = 0
WHERE товар IN ( SELECT DISTINCT товар
                 FROM таблица
                 WHERE количество = 0)
10 янв 18, 12:42    [21093027]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на проверку строк  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
например
declare @t table (obj_kod nvarchar(50))

insert @t
(obj_kod)
select
	obj_kod 
from 
	dbo.View_SPP_poreikis_15
where
	Poreikis = 0

update t
set
	Poreikis = 0
from
	dbo.View_SPP_poreikis_15 t
	inner join @t t2 on t2.obj_kod = t.obj_kod
10 янв 18, 12:45    [21093042]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на проверку строк  [new]
Vadim Z
Member

Откуда:
Сообщений: 15
А без Update можно ? Это уже Views . Может в нём можно что то сделать ? моя логика работает так, но не знаю как это написать правильно SQL серверу.

Case when data = data AND pre_kod = pre_kod AND expr1 = expr1 в складе san_kod='PAKAVIMO T' Poreikis='0' THEN в складе san_kod='PAKAVIMO' Poreikis='0'
10 янв 18, 12:52    [21093065]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на проверку строк  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
Vadim Z
Это уже Views . Может в нём можно что то сделать ?
как пример
select
	obj_kod,
	case when t2.flag = 1 then 0 else t.Poreikis end as Poreikis
from
	dbo.View_SPP_poreikis_15 t
	inner join
		(
		select
			obj_kod, 1 as flag
		from 
			dbo.View_SPP_poreikis_15
		where
			Poreikis = 0
		) t2 on t2.obj_kod = t.obj_kod
10 янв 18, 13:01    [21093092]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на проверку строк  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20529
Вам надо просто выбрать, а не обновить? Тогда, может, заработает такое вот:
SELECT ... , CASE WHEN 0 = MIN(количество) OVER (PARTITION BY товар) THEN 0 ELSE количество END, ...
10 янв 18, 13:24    [21093181]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на проверку строк  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20529
Во всяком случае sqlfiddle говорит, что так можно.
10 янв 18, 13:28    [21093194]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на проверку строк  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Akina
Во всяком случае sqlfiddle говорит, что так можно.

А скриншот от ТС говорит, что у него SQL Server 2000, и ему так нельзя.
10 янв 18, 14:10    [21093409]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на проверку строк  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20529
Minamoto
скриншот от ТС говорит, что у него SQL Server 2000
Ну слабоват я в скриншотах...
10 янв 18, 14:30    [21093494]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на проверку строк  [new]
Vadim Z
Member

Откуда:
Сообщений: 15
MS Server 2014
10 янв 18, 15:17    [21093702]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на проверку строк  [new]
Vadim Z
Member

Откуда:
Сообщений: 15
Akina
Вам надо просто выбрать, а не обновить? Тогда, может, заработает такое вот:
SELECT ... , CASE WHEN 0 = MIN(количество) OVER (PARTITION BY товар) THEN 0 ELSE количество END, ...


можно здесь поподробней, под мой вариант написать ?

WHEN 0 = MIN(количество) что здесь имеется ввиду за 0 ?
10 янв 18, 17:37    [21094370]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на проверку строк  [new]
Vadim Z
Member

Откуда:
Сообщений: 15
Может можно их как то объединить, оставить только ту, где Poreikis=0 ???
10 янв 18, 17:49    [21094425]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на проверку строк  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7758
Vadim Z,

дык full outer join + coalesce(sklad1, sklad2, 0).
10 янв 18, 17:53    [21094438]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на проверку строк  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7758
Или я не понял задачу и в результат требуется добавить строки, не существующие на одном из складов?
10 янв 18, 17:57    [21094450]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на проверку строк  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
Vadim Z,

главный вопрос... в этом вашем Poreikis могут быть значения меньше нуля?
10 янв 18, 18:14    [21094482]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на проверку строк  [new]
Vadim Z
Member

Откуда:
Сообщений: 15
Дедушка,
Poreikis не может быть меньше нуля.
Poreikis=0 тогда, когда в складе PAKAVIMO T остаток больше чем Expr1. Если это выполняется, то остаток в складе PAKAVIMO не интересует и это строка может не показываться или присвоить ей тоже значение 0. И потом делать выборку всё кроме 0
10 янв 18, 18:43    [21094578]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на проверку строк  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20529
Vadim Z
можно здесь поподробней, под мой вариант написать ?
Что - подробнее? большая проблема заменить имена полей на свои?

Vadim Z
WHEN 0 = MIN(количество) что здесь имеется ввиду за 0 ?
Ноль - это число такое... постоянное... константа типа. Небось WHEN x=0 не удивит? Так почему WHEN 0=x удивляет?
10 янв 18, 20:46    [21094822]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на проверку строк  [new]
Vadim Z
Member

Откуда:
Сообщений: 15
Akina
Vadim Z
можно здесь поподробней, под мой вариант написать ?
Что - подробнее? большая проблема заменить имена полей на свои?

Vadim Z
WHEN 0 = MIN(количество) что здесь имеется ввиду за 0 ?
Ноль - это число такое... постоянное... константа типа. Небось WHEN x=0 не удивит? Так почему WHEN 0=x удивляет?

data - дата
pre_kod - код товара
expr1 - нужное количество
likutis - остаток в складе
san_kod- склад
Poreikis - если в складе PAKAVIMO T количество больше или ровно нужному количеству то 0, иначе нужное количество.
pppp-если в в складе PAKAVIMO T POREIKIS=0 то pppp=0 и в складе PAKAVIMO тоже должно оказаться pppp=0

Выражение будет выглядеть так ?:

SELECT data, pre_kod, expr1, likutis, san_kod, poreikis, pppp , CASE WHEN 0 = MIN(expr1) OVER (PARTITION BY pre_kod) THEN 0 ELSE expr1 END as proba

так ?
10 янв 18, 21:44    [21094906]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на проверку строк  [new]
Vadim Z
Member

Откуда:
Сообщений: 15
Удалённо попробовал, вроде результат нужный.
Спасибо. Завтра отпишусь всё ли получилось. Вот код который прошёл:

SELECT data, pre_kod, expr1, likutis,obj_kod, san_kod, poreikis, CASE WHEN 0 = MIN(poreikis) OVER (PARTITION BY pre_kod) THEN 0 ELSE poreikis END as proba   
FROM            dbo.View_SPP_poreikis_15
10 янв 18, 22:27    [21094981]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить