0

私はテーブルを持っています:

id | Val
____________
1  | a
2  | s
3  | e
4  | f
5  | h

2 つのパラメーターを受け入れるクエリがあります。

@id1 int
@id2 int

このクエリには 2 つの内部変数があります。

@val1 int
@val2 int

これらの変数に値を設定する必要があります: like -

select @val1=val from where id=@id1
select @val2=val from where id=@id2

私は1つのクエリでそれをしたい....私は試しました:

select @val1=val , @val2=val  
from  table
where id=@id2 or  id=@id1

問題は :

@val1valにのみ設定する必要がありますid=@id1

@val2valにのみ設定する必要がありますid=@id2

(id=@id1 の場合、@val2 はどうなりますか?どのような値が得られますか?)

これらの 2 つのクエリを 1 に記述するにはどうすればよいですか?

4

4 に答える 4

1

UNION を使用することもできます。これは、誰に尋ねるかによって、クエリの読みやすさを向上させる場合としない場合があります。CASE ステートメントまたは一時テーブル ソリューションの方が読みやすいと思います。

select @val1=val from where id=@id1 
UNION
select @val2=val from where id=@id2 
于 2012-05-09T17:39:16.180 に答える
1
SELECT 
      @val1=CASE WHEN id=@id1 THEN Val ELSE @val1 END
    , @val2=CASE WHEN id=@id2 THEN Val ELSE @val2 END
FROM table
WHERE ID IN (@id1, @id2)

テストするには:

CREATE TABLE #tmp (ID INT, VAL CHAR(1))
INSERT INTO #tmp VALUES (1,'a')
INSERT INTO #tmp VALUES (2,'s')
INSERT INTO #tmp VALUES (3,'e')
INSERT INTO #tmp VALUES (4,'f')
INSERT INTO #tmp VALUES (5,'h')

DECLARE @id1 INT=1
DECLARE @id2 INT=4

DECLARE @val1 CHAR(1)
DECLARE @val2 CHAR(1)

SELECT 
      @val1=CASE WHEN id=@id1 THEN Val ELSE @val1 END AS Val1
    , @val2=CASE WHEN id=@id2 THEN Val ELSE @val2 END AS Val2
FROM #tmp
WHERE ID IN (@id1, @id2)

SELECT @val1, @val2  --Returns a, f

DROP TABLE #tmp
于 2012-05-09T16:07:27.590 に答える
0

それはあなたのために働きますか:

select @val1=val1 , @val2=val2 
FROM
(
select  
MAX(CASE WHEN id = @id1 THEN val END) AS val1,
MAX(CASE WHEN id = @id2 THEN val END) AS val2  
from  table 
where id=@id2 or  id=@id1 
)a
于 2012-05-09T16:00:20.283 に答える
0

どうですか?

select (select @val1=val from where id=@id1) as val1,
(select @val2=val from where id=@id2) as val2
于 2012-05-09T16:03:03.233 に答える