Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server如何编写查询,其中一个结果应具有第一个条件,其余条件是可选的_Sql Server - Fatal编程技术网

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)