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

Откуда:
Сообщений: 7
Всем добрый день!
Подскажите, как мне в одном UPDATE разбросать число 17 до его исчерпания по строкам таблицы, то есть закрыть позиции
строка 1: количество 5 - закрываем 5, остаток от 17: 12
строка 2: количество 15 - закрываем 12, остаток от 17: 0
18 окт 16, 14:48    [19794933]     Ответить | Цитировать Сообщить модератору
 Re: SQL update  [new]
Владислав Колосов
Member

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

подсчитайте нарастающий итог, вычтите его из 17.
18 окт 16, 14:53    [19794974]     Ответить | Цитировать Сообщить модератору
 Re: SQL update  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
IF OBJECT_ID('tempdb..#Sum') IS NOT NULL
	DROP TABLE #Sum

CREATE TABLE #Sum
(
	id	INT IDENTITY(1,1) ,
	s	INT
)

INSERT INTO #Sum
VALUES (5),(15)

DECLARE @N INT = 17

SELECT 
	@N - SUM(s) OVER (ORDER BY Id)
FROM #Sum
18 окт 16, 14:59    [19795004]     Ответить | Цитировать Сообщить модератору
 Re: SQL update  [new]
AlexSh1
Member

Откуда:
Сообщений: 7
IF OBJECT_ID('tempdb..#Sum') IS NOT NULL
DROP TABLE #Sum

CREATE TABLE #Sum
(
id INT ,
s INT
)

INSERT INTO #Sum (id,s) VALUES (5,15)

DECLARE @N INT
SET @N= 17

SELECT
@N - SUM(s) OVER(ORDER BY Id)
FROM #Sum


На SQL 2005 express валится :
Сообщение 102, уровень 15, состояние 1, строка 16
Неправильный синтаксис около конструкции "order".
18 окт 16, 15:20    [19795154]     Ответить | Цитировать Сообщить модератору
 Re: SQL update  [new]
AlexSh1
Member

Откуда:
Сообщений: 7
TaPaK,
F OBJECT_ID('tempdb..#Sum') IS NOT NULL
DROP TABLE #Sum

CREATE TABLE #Sum
(
id INT ,
s INT
)

INSERT INTO #Sum (id,s) VALUES (5,15)

DECLARE @N INT
SET @N= 17

SELECT
@N - SUM(s) OVER(ORDER BY Id)
FROM #Sum


На SQL 2005 express валится :
Сообщение 102, уровень 15, состояние 1, строка 16
Неправильный синтаксис около конструкции "order".
18 окт 16, 15:21    [19795162]     Ответить | Цитировать Сообщить модератору
 Re: SQL update  [new]
_human
Member

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

2005 не поддреживает ORDER BY для SUM.
нужно заменить нарастающий итог - https://www.sql.ru/faq/faq.aspx
18 окт 16, 15:26    [19795194]     Ответить | Цитировать Сообщить модератору
 Re: SQL update  [new]
AlexSh1
Member

Откуда:
Сообщений: 7
IF OBJECT_ID('tempdb..#Sum') IS NOT NULL
DROP TABLE #Sum

CREATE TABLE #Sum
(
id INT ,
s INT
)

INSERT INTO #Sum (id,s) VALUES (5,15)

DECLARE @N INT
SET @N= 17

SELECT
@N - SUM(s) OVER(ORDER BY id) Nom_Kol
FROM #Sum

на 2008 тоже валится
18 окт 16, 17:08    [19795807]     Ответить | Цитировать Сообщить модератору
 Re: SQL update  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
AlexSh1
на 2008 тоже валится
Возьмите SQL2012
18 окт 16, 17:10    [19795816]     Ответить | Цитировать Сообщить модератору
 Re: SQL update  [new]
AlexSh1
Member

Откуда:
Сообщений: 7
iap,
IF OBJECT_ID('tempdb..#Sum') IS NOT NULL
DROP TABLE #Sum

CREATE TABLE #Sum
(
id INT ,
s INT
)

INSERT INTO #Sum (id,s) VALUES (5,15)

DECLARE @N INT= 17

SELECT
@N - SUM(s) OVER (ORDER BY Id)
FROM #Sum

и даже на SQL 2016 дает ошибку:
Сообщение 102, уровень 15, состояние 1, строка 15
Incorrect syntax near 'order'.
:(
19 окт 16, 09:26    [19797841]     Ответить | Цитировать Сообщить модератору
 Re: SQL update  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
AlexSh1
iap,
и даже на SQL 2016 дает ошибку:
Сообщение 102, уровень 15, состояние 1, строка 15
Incorrect syntax near 'order'.
:(


где в указанном запросе есть 'order'.??
19 окт 16, 09:29    [19797855]     Ответить | Цитировать Сообщить модератору
 Re: SQL update  [new]
iljy
Member

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

либо у вас уровень совместимости БД выставлен низкий, либо вы врете, у меня на 2012 все отрабатывает нормально.
19 окт 16, 09:32    [19797872]     Ответить | Цитировать Сообщить модератору
 Re: SQL update  [new]
AlexSh1
Member

Откуда:
Сообщений: 7
SELECT
@N - SUM(s) OVER (ORDER BY Id)
FROM #Sum
19 окт 16, 09:33    [19797876]     Ответить | Цитировать Сообщить модератору
 Re: SQL update  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
AlexSh1,

что даёт
SELECT compatibility_level,@@VERSION FROM sys.databases WHERE name = DB_NAME();  
19 окт 16, 09:37    [19797902]     Ответить | Цитировать Сообщить модератору
 Re: SQL update  [new]
AlexSh1
Member

Откуда:
Сообщений: 7
iljy,
На базе 2016 сервера заработало ! Огромное спасибо:)
19 окт 16, 09:38    [19797905]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить