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
Utilisez simplement SELECT.
par exemple.
SELECT @myValue = MyField FROM MyTable WHERE ....
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.
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.