我有一张表格如下:
CLASS VALUE
1 A
1 B
1 C
2 A
2 C
3 B
3 D
4 A
5 C
5 A
我有一个用户提交的值数据集,我想查找其值是用户提交的数据集子集的任何类。
例如,
如果数据集为A
,B
和C
,则结果将为1
,2
,4
,和5
。
如果数据集为A
且C
,则结果将为2
,4
和5
。
如果数据集为A
,则结果为类4
。
我所使用的平台是SQL Server,但实际上任何基于SQL的答案都是最好的。
答案 0 :(得分:1)
根据评论It's passed as a table.
- 假设表是变量@UserInput
且单个列Value
,您可以使用WHERE EXISTS
子句检查是否存在在用户输入字段中输入该值,并提取DISTINCT
Class
值。
Select Distinct Class
From YourTable T
Where Exists
(
Select *
From @UserInput U
Where T.Value = U.Value
)
您的SQL语法会有所不同,但这应该在语法上指向正确的方向。
如何实现这一点的完整示例如下:
创建用户定义的表格类型
Create Type dbo.UserInput As Table
(
Value Varchar (10)
)
Go
创建存储过程
Create Proc dbo.spGetClassesByUserInput
(
@UserInput dbo.UserInput ReadOnly
)
As Begin
Select Distinct Class
From YourTable T
Where Exists
(
Select *
From @UserInput U
Where T.Value = U.Value
)
End
Go
使用用户输入调用存储过程
Declare @Input dbo.UserInput
Insert @Input
Values ('A'), ('B'), ('C')
Execute dbo.spGetClassesByUserInput @Input
答案 1 :(得分:0)
您可以创建一个存储过程,将用户条目作为字符串传递给ex。 A,B,C
Create Procedure dbo.GetClasses
@v_UserEntry Varchar(200)
As
Begin
Declare @SQLQuery AS NVarchar(1000)
Declare @ParamDefinition AS NVarchar(300)
SET @v_UserEntry= REPLACE(@v_UserEntry,',',''',N''')
Set @SQLQuery ='Select Class'
Set @SQLQuery = @SQLQuery + ' From TableName'
Set @SQLQuery = @SQLQuery + ' Where Value in (N'''+@v_UserEntry+''')'
Set @SQLQuery = @SQLQuery + ' Group By Class'
Execute sp_executesql @SQLQuery
End
Go