Sql server SQL Server如何编写查询,其中一个结果应具有第一个条件,其余条件是可选的
我想写一个查询,其中我的结果应该至少包含一个第一个条件的结果,其余条件是可选的 我正在尝试下面这样的东西..这样行吗Sql server SQL Server如何编写查询,其中一个结果应具有第一个条件,其余条件是可选的,sql-server,Sql Server,我想写一个查询,其中我的结果应该至少包含一个第一个条件的结果,其余条件是可选的 我正在尝试下面这样的东西..这样行吗 SELECT * FROM Student WHERE Condition1 AND ( Condition2 OR Condition3 ) 下面是我的样本 IF OBJECT_ID('tempdb..#Student') IS NOT NULL DROP TABLE #Student CREATE TABLE #Student ( StudentID IN
SELECT * FROM Student
WHERE Condition1
AND
(
Condition2
OR
Condition3
)
下面是我的样本
IF OBJECT_ID('tempdb..#Student') IS NOT NULL
DROP TABLE #Student
CREATE TABLE #Student
(
StudentID INT,
IsActive BIT,
IsPassed BIT,
IsProjectDone BIT
)
INSERT INTO #Student
SELECT 1, 1, 1, 0
INSERT INTO #Student
SELECT 2, 0, 0, 1
INSERT INTO #Student
SELECT 3, 1, 1, 1
INSERT INTO #Student
SELECT 4, 0, 0, 0
SELECT * FROM #Student
-- SO I want atleast one record of Isactive =1 and other conditions such as (ispassed = 1, isprojectdone = 1 are optional
你可以有条件地这样做
Declare @Clientid int = 1
Select * from YourTable
where
Col2 > 0 --(any true condition)
or
(isnull(col1,0) = @clientid or @Clientid is null) --(any condition which may or may not true i.e parameter passed and it may be have proper value or null)
--Again run above query with clientid is null
Set @Clientid = null
Select * from YourTable
where
Col2 > 0 --(any true condition)
or
(isnull(col1,0) = @clientid or @Clientid is null)
也可以使用Sqlserver的功能
SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);
您的问题是如何获取至少一条记录,其中Isactive=1和其他条件(Ispassed=1,Isprojectdone=1)是可选的 如果其他条件是可选的,为什么还要用这些条件过滤数据呢。 您在随附的评论中指出:
所以在结果中我想看到ID为1,3的学生记录,因为 IsActive=1,我也应该能够看到学生记录:2,因为 IsProjectDone=1 根据你的评论,条件没有任何可选项,你需要让所有学生至少满足一个条件 由于您的条件是基于BIT类型的列,您可以这样做:
SELECT *
FROM #Student
WHERE IsActive | IsProjectDone | IsPassed = 1
你的意思是“可选”下的“未指定”吗?
如果是这样,下面的脚本应该可以工作。当@IsPassed和@IsProjectDone被声明但未指定时,您将获得所有活动学生。如果指定这些参数,将获得额外的筛选
DECLARE @IsPassed BIT
DECLARE @IsProjectDone BIT
-- SET @IsPassed = 1
-- SET @IsProjectDone = 1
SELECT * FROM #Student
WHERE IsActive = 1 AND
(@IsPassed IS NULL OR IsPassed = @IsPassed) AND
(@IsProjectDone IS NULL OR IsProjectDone = @IsProjectDone)
我们不能只在一个查询而不是两个查询中执行此操作,然后全部合并。但是,在您使用的第一个查询中,在条件1和条件2之间,我希望结果至少有一条条件1的记录。Condition2和condition3记录是可选的。已发布的示例如果您添加示例数据和预期结果,您的问题将更有意义。已发布的临时表示例基于短语“和其余条件是可选的”,我想不会。逻辑运算符和“可选”的概念是矛盾的。但我冒昧地猜测,您希望使用可选参数执行某些操作。如果是这样,Erland将对此进行讨论。将该站点标记为书签,因为它包含许多有用的信息。因此,在结果中,我希望看到ID为1,3的学生记录,因为IsActive=1,我还应该能够看到学生记录:2,因为IsProjectDone=1@user1030181那么显然你想用或代替AND?
DECLARE @IsPassed BIT
DECLARE @IsProjectDone BIT
-- SET @IsPassed = 1
-- SET @IsProjectDone = 1
SELECT * FROM #Student
WHERE IsActive = 1 AND
(@IsPassed IS NULL OR IsPassed = @IsPassed) AND
(@IsProjectDone IS NULL OR IsProjectDone = @IsProjectDone)