Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 2005 如何在SQL查询中组合WHERE子句_Sql Server 2005_Tsql - Fatal编程技术网

Sql server 2005 如何在SQL查询中组合WHERE子句

Sql server 2005 如何在SQL查询中组合WHERE子句,sql-server-2005,tsql,Sql Server 2005,Tsql,我怎样才能使这个查询更好 SELECT ClientID, BatchID, jobid, subjobid, count(clientid) as Total FROM data with(nolock) WHERE batchid in (select BatchID from data with(nolock) where lookupcode = '111111111111') and clientid in (select ClientID from data with(nolo

我怎样才能使这个查询更好

SELECT ClientID, BatchID, jobid, subjobid, count(clientid) as Total 
FROM data with(nolock) 
WHERE batchid in (select BatchID from data with(nolock) where lookupcode = '111111111111') 
and clientid in (select ClientID from data with(nolock) where lookupcode = '111111111111') 
and jobid in (select jobid from data with(nolock) where lookupcode = '111111111111') 
and subjobid in (select subjobid from data with(nolock) where lookupcode = '111111111111') 
and entrytype <> 'C'
and entrytype <> 'M'
group by clientid,BatchID, jobid, subjobid
更新:

试试CTE:

WITH lookup AS (
    select ClientID, BatchID, JobID, SubJobID 
    from data with(nolock) 
    where lookupcode = '111111111111'
)
SELECT ClientID, BatchID, jobid, subjobid, count(clientid) as Total 
FROM data with(nolock) 
WHERE batchid in (select BatchID from lookup) 
and clientid in (select ClientID from lookup) 
and jobid in (select jobid from lookup) 
and subjobid in (select subjobid from lookup) 
and entrytype not in ('C', 'M')
group by clientid,BatchID, jobid, subjobid
但是,您的原始解决方案没有实现您在注释中所述的条件:

查找具有相同批次的所有行 工作和主题

因为您没有检查job和subjob的组合

如果需要合并某些字段以获得精确匹配,请尝试以下条件

WHERE EXISTS(
    SELECT 1 
    FROM lookup 
    WHERE lookup.jobid = data.jobid AND lookup.subjobid = data.subjobid
)
由于我们没有表结构和示例数据,因此很难检查我们的解决方案是否正确。

请尝试此方法

SELECT d1.clientid, d1.BatchID, d1.jobid, d1.subjobid, count(clientid) as Total 
FROM data with(nolock) as d1
join (
    select BatchID, ClientID, jobid, subjobid 
    from data with(nolock) 
    where lookupcode = '111111111111'
) as d2
WHERE d1.batchid = d2.BatchID 
and d1.clientid = d2.clientid
and d1.jobid = d2.jobid
and d1.subjobid d2.subjobid
and d1.entrytype <> 'C'
and d1.entrytype <> 'M'
group by d1.clientid, d1.BatchID, d1.jobid, d1.subjobid

“更好”是非常主观的。您的意思是希望此查询执行得更好吗?你想让它更具可读性吗?你想让它更具可移植性吗?性能更好,我认为在where子句的4个不同部分使用相同的查询不太好。我认为我们感到困惑,因为我们没有足够的信息。您可能已经有了完美的查询,也可能没有。您可以共享表结构和一些示例数据吗?表中的字段batchid、jobid和SubboId不是唯一的,它们有多行。唯一标识符是查找代码。因此,如果我有一个查找代码,我可以得到批次、作业、子对象,然后使用该信息进行查询,以获得订单的其余部分。这只得到一行,我需要得到where子句中查询中的所有行。我不明白,请提供示例数据和输出。我想我应该更具体一些,我需要找到与同一条形码具有相同批处理作业和子作业的所有行。这个答案只得到一条记录的信息,不是所有的你的查询给了我6119 22849 1我的查询给了我6119 22849 1 306注意计数是重要的字段。。。
WHERE EXISTS(
    SELECT 1 
    FROM lookup 
    WHERE lookup.jobid = data.jobid AND lookup.subjobid = data.subjobid
)
SELECT d1.clientid, d1.BatchID, d1.jobid, d1.subjobid, count(clientid) as Total 
FROM data with(nolock) as d1
join (
    select BatchID, ClientID, jobid, subjobid 
    from data with(nolock) 
    where lookupcode = '111111111111'
) as d2
WHERE d1.batchid = d2.BatchID 
and d1.clientid = d2.clientid
and d1.jobid = d2.jobid
and d1.subjobid d2.subjobid
and d1.entrytype <> 'C'
and d1.entrytype <> 'M'
group by d1.clientid, d1.BatchID, d1.jobid, d1.subjobid