Как установить переменную в Ms Sql выберите - PullRequest
19 голосов
/ 27 мая 2011

Как установить в MS Sql переменные выбора, идея выглядит следующим образом:

Declare @var int

SET @var = 0;

Select (if(idid = @var) then sum+1 else sum-1) AS Sum,
   set @var = id 
FROM table

Редактирование на основе комментариев.

DECLARE @T TABLE
(
ID  INT PRIMARY KEY,
IDID INT,
SUMM INT 
)

INSERT INTO @T
SELECT 1,1,4 UNION ALL
SELECT 2,1,5 UNION ALL 
SELECT 3,2,6 UNION ALL 
SELECT 4,2,7 UNION ALL 
SELECT 5,3,8

В результате выбора мне нужно:

ID  IDID  SUMM 
--  ----  ----
1   1     4 
2   1     0 
3   2     6 
4   2     0 
5   3     8

Ответы [ 4 ]

21 голосов
/ 27 мая 2011

Это то, что вы пытаетесь сделать?

Declare @var int, @id int
SET @var = 0

SELECT @id = id FROM Table t

if(@id = @var)
BEGIN
    SET @var = @var + 1
END
ELSE
BEGIN
    SET @var = @var - 1
END

print @var
6 голосов
/ 27 мая 2011

Просто используйте SELECT.

, например

SELECT @myValue = MyField FROM MyTable WHERE ....
5 голосов
/ 27 мая 2011

Хотя, как и другие, я не совсем понял идею, запрос ниже производит вывод, как указано в исходном сообщении (которое, в свою очередь, было получено из вашего комментария). Для этого требуется SQL Server 2005 или выше .

WITH cte AS (
  SELECT
    ID,
    IDID,
    SUMM,
    RowNum = ROW_NUMBER() OVER (PARTITION BY IDID ORDER BY ID)
  FROM @T
)
SELECT
  ID,
  IDID,
  SUMM = CASE RowNum WHEN 1 THEN SUMM ELSE 0 END
FROM cte

Обычно выходной столбец SUMM содержит SUMM из исходной таблицы, если это перваяпоявление IDID в соответствии с указанием ID, в противном случае столбец содержит 0.

Не уверен, насколько это далеко от того, что вы ищете, но, возможно, это поможет вам более подробно объяснить вашу проблемуточно.

0 голосов
/ 29 апреля 2019

У меня была плохая привычка нарушать ссылочную целостность при использовании моих тестовых данных.Но это было полезно для восстановления данных со ссылочной целостностью после того, как я закончил тестирование своих сценариев:

DECLARE @foreign_id INTEGER;
   SET @foreign_id = (SELECT TOP 1 (FK_column) FROM (FK_table));
-- To confirm the value is what you want it to be
SELECT @foreign_id;

Теперь я мог многократно вставлять данные обратно после завершения, используя это значение, чтобы гарантировать, что:

-- Referential integrity check:
SELECT (FK_column) FROM (FK_table)
   WHERE (FK_column) NOT IN
   (SELECT (PK_column) FROM (PK_table));

не вернул никаких значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...