web-dev-qa-db-ja.com

Ms SQL Selectに変数を設定する方法

どのようにMS Sql select変数に設定できますか、アイデアは次のようになります:

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
19
valisimo

これはあなたがやろうとしていることですか?

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
21
KenL

SELECTを使用してください。

例えば.

SELECT @myValue = MyField FROM MyTable WHERE ....
6

他の人と同じように、私は実際にそのアイデアを理解していませんが、以下のクエリは元の投稿で指定された出力を生成します(これはあなたのコメントから派生しています)。 これには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

目標からどれほど離れているかはわかりませんが、問題をより正確に説明するのに役立つかもしれません。

5
Andriy M

テストデータを使用しているときに、参照整合性に違反するという悪い習慣がありました。しかし、これはスクリプトのテストが終了した後、参照整合性を使用してデータを復元するのに役立ちました。

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));

値を返しませんでした。

0
Christian Meyer