1

2 つのテーブルがあるとします。

  • 学生:ID、名前、年齢、クラスなど
  • 条件 : ID、条件

列 Conditions.Condition には、"std.Age >2" または "std.Class = 3" などの SQL 条件が含まれています。

次のことを行うものが欲しい:

SELECT std.Id as StudentId, con.Id as ConId
FROM   Students as std,
       Condition as con
WHERE  con.Condition

多分学生IDを取る関数?

どうすればこれを達成できますか?


学生:

1 , Yossi, 25, 3..
2 , David, 22, 3..
3 , Jhon, 5, 2..
4 , Smith, 25, 4..

条件:

1 , Age > 3
2 , Class = 4
3 , Name LIKE '%i%'

結果は次のようになります (Condition, Studnet):

(1,1) (1,2) (1,3) (1,4) // all are older than 3
(2,4)                   // only Smith is in class 4
(3,1) (3,2) (3,4)       // all except jhon have an i in their name
4

2 に答える 2

2

次のクエリを試してください:

DECLARE @CONDITIONS varchar(max) =
REPLACE(REPLACE((
SELECT'UNION ALL SELECT ID AS STUDENTID , ' + CONVERT(VARCHAR , ID ) + ' AS CONDITIONID FROM STUDENTS WHERE ' + CONDITION + ' ' 
FROM CONDITION
FOR XML PATH('')
) , '&LT;' , '<') , '&GT;' , '>') 

SET @CONDITIONS = (SELECT SUBSTRING(@CONDITIONS , 11 , LEN(@CONDITIONS)))

EXEC(@CONDITIONS)

これは、条件を適用するためのより一般的な方法です。条件を 1 つだけ適用する場合は、すべての条件を取得する場所からクエリに where 句を追加します。このクエリは、1 つ以上の条件に対して実行できます。現在、すべての条件を適用するこのクエリを作成しました。

sqlfiddle

于 2013-07-07T18:16:33.087 に答える
0

条件を含む文字列を作成し、それを実行する必要があります。これが「動的SQL」と呼ばれるものです

例として:

 DECLARE @sql Varchar(400)

 SELECT @sql = 'SELECT * FROM MyTable WHERE ' + condition
  FROM Conditions
 WHERE cond_key = 1

 -- This will yield you a full SQL statement, if the condition record
 -- is there.

 EXECUTE(@sql)            -- And this will execute it
于 2013-07-07T19:29:07.940 に答える