Category
で見つかった場合はOtherTable.ColumnA
0を返し、そうでない場合は1を返します
CASE
で使用できますEXISTS
SELECT CASE WHEN EXISTS(
SELECT NULL
FROM AllowedValues av
WHERE av.ColumnA = Category
) THEN 0 ELSE 1 END AS ErrorCode
, Category
FROM [Table]
編集: これは sql-fiddle です: http://sqlfiddle.com/#!3/55a2e/1
編集:計算列を使用したいことに気付きました。私が読んだように、サブクエリではなく、スカラー値でのみ使用できます。ただし、スカラー値関数を作成できます。
例えば:
create table AllowedValues(ColumnA varchar(1));
insert into AllowedValues Values('A');
insert into AllowedValues Values('B');
insert into AllowedValues Values('C');
create table [Table](Category varchar(1));
insert into [Table] Values('A');
insert into [Table] Values('B');
insert into [Table] Values('C');
insert into [Table] Values('D');
insert into [Table] Values('E');
-- create a scalar valued function to return your error-code
CREATE FUNCTION udf_Category_ErrorCode
(
@category VARCHAR(1)
)
RETURNS INT
AS BEGIN
DECLARE @retValue INT
SELECT @retValue =
CASE WHEN EXISTS(
SELECT NULL
FROM AllowedValues av
WHERE av.ColumnA = @category
) THEN 0 ELSE 1 END
RETURN @retValue
END
GO
これで、関数を使用して値を計算する計算列として列を追加できます。
ALTER TABLE [Table] ADD ErrorCode AS ( dbo.udf_Category_ErrorCode(Category) )
GO
実行中の SQL は次のとおりです: http://sqlfiddle.com/#!3/fc49e/2
注: @Damien_The_Unbelieve が他の回答でコメントしたように、UDF で結果を永続化しても、OtherTable の行が変更された場合、値は更新されません。必要に応じて、UDF を使用してテーブルを手動で更新する必要があります。