web-dev-qa-db-fra.com

Comment définir une variable dans Ms Sql select

Comment puis-je définir dans les variables de sélection MS SQL, l'idée ressemble à ceci:

Declare @var int

SET @var = 0;

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

Modifier en fonction des commentaires.

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

Dans le résultat sélectionné, j'ai besoin de:

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

Utilisez simplement SELECT.

par exemple.

SELECT @myValue = MyField FROM MyTable WHERE ....
6
Paul Alan Taylor

Bien que, comme d'autres, je ne comprenne pas vraiment l'idée, la requête ci-dessous produit la sortie telle que spécifiée dans le message d'origine (qui, à son tour, est dérivée de votre commentaire). Cela nécessite SQL Server 2005 ou supérieur .

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

Fondamentalement, la colonne de sortie SUMM contient SUMM de la table d'origine s'il s'agit de la première occurrence de IDID ordonnée par ID, sinon la colonne contient 0.

Je ne sais pas à quelle distance de ce que vous recherchez, mais cela vous aidera peut-être à expliquer votre problème plus précisément.

5
Andriy M

J'avais la mauvaise habitude de violer l'intégrité référentielle lors de l'utilisation de mes données de test. Mais cela a été utile pour restaurer les données avec une intégrité référentielle après avoir fini de tester mes scripts:

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;

Maintenant, je pouvais réinsérer plusieurs fois les données une fois que j'avais fini, en utilisant cette valeur pour m'assurer que:

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

n'a renvoyé aucune valeur.

0
Christian Meyer