Sql In语句只获取第一个结果
我一直在写一份报告,试图根据工作流程的类型进行筛选。我正在使用Report Builder 3.0创建不同工作流的列表,但我的IN语句只获取第一个工作流,而不是多个工作流。在不使用工作流过滤器的情况下运行SQL将显示多个工作流,但仅在第一个工作流中使用返回Sql In语句只获取第一个结果,sql,Sql,我一直在写一份报告,试图根据工作流程的类型进行筛选。我正在使用Report Builder 3.0创建不同工作流的列表,但我的IN语句只获取第一个工作流,而不是多个工作流。在不使用工作流过滤器的情况下运行SQL将显示多个工作流,但仅在第一个工作流中使用返回 SELECT OH.ord_hdrnumber, OH.ord_refnum, OH.ord_completiondate, OH.ord_billto, BillingRep.R
SELECT OH.ord_hdrnumber,
OH.ord_refnum,
OH.ord_completiondate,
OH.ord_billto,
BillingRep.Rep,
OH.ord_totalmiles,
OH.ord_revtype1,
OH.ord_revtype2,
OH.ord_trailer,
IH.ivh_invoicestatus,
p.cty_name AS OrgCity,
p.cty_state AS OrgSt,
d.cty_name AS DestCity,
d.cty_state AS DestSt,
IH.ivh_totalcharge AS 'Invoice Total',
IH.ivh_remark AS 'Remark',
DetCharges.DET,
LumpCharges.LUMP,
LastCarrier.Carrier,
BOLExistsInSynergize.BOLCount,
Workflow.WF
FROM orderheader OH WITH (NOLOCK)
INNER JOIN city AS p ON OH.ord_origincity = p.cty_code
INNER JOIN city AS d WITH (nolock) ON OH.ord_destcity = d.cty_code
INNER JOIN Invoiceheader IH With (NoLock) ON IH.ord_hdrnumber = OH.ord_hdrnumber
-- outer apply's for the sub selects so you only have to do it once
OUTER APPLY (SELECT SUM(ivd_charge) as DET
FROM invoicedetail WITH (nolock)
WHERE (ord_hdrnumber = OH.ord_hdrnumber) AND (cht_itemcode IN ('DETDEL', 'DETPU', 'DETD', 'DET' ))) as DetCharges
OUTER APPLY (SELECT SUM(ivd_charge) as LUMP
FROM invoicedetail WITH (nolock)
WHERE (ord_hdrnumber = OH.ord_hdrnumber) AND (cht_itemcode IN ('HAND', 'LUMP' ))) AS LumpCharges
OUTER APPLY (SELECT lh.lgh_carrier AS Carrier
FROM legheader lh WITH (NoLock)
WHERE lh.lgh_number = (SELECT top 1 s.lgh_number
FROM stops s with (nolock)
WHERE s.ord_hdrnumber = oh.ord_hdrnumber
ORDER BY s.stp_mfh_sequence desc)) AS LastCarrier
OUTER APPLY (SELECT COUNT(*) as BOLCount
FROM s_SynARXref_Main MN (nolock)
WHERE MN.OrderNumber = OH.ord_number
AND MN.IN_DocTypeID IN (SELECT DT.IN_DocTypeID
FROM s_SynARXref_DocTypes DT (nolock)
WHERE DT.In_DocTypeName = 'BOL')) AS BOLExistsInSynergize
OUTER APPLY (SELECT TOP 1 WF.Workflow AS WF
FROM s_SynARXref_Main MN (nolock)
inner join s_SynARXref_Workflow WF with (nolock) on MN.WorkFlowID$ = WF.WorkFlowID$
WHERE MN.OrderNumber = OH.ord_number
AND WF.Workflow <> 'Complete'
AND MN.IN_DocTypeID IN (SELECT DT.IN_DocTypeID
FROM s_SynARXref_DocTypes DT (nolock)
WHERE DT.In_DocTypeName = 'BOL')) as Workflow
OUTER APPLY (select TOP 1 d.COL_DATA as Rep
from EXTRA_INFO_COLS c
inner join EXTRA_INFO_DATA d on c.COL_ID = d.COL_ID
where c.COL_NAME = 'Billing Rep'
and TABLE_KEY = oh.ord_billto ) as BillingRep
WHERE (IH.ivh_invoicestatus IN ('HLD', 'HLA'))
AND (OH.ord_completiondate BETWEEN '20180401' AND '20180501')
AND (OH.ord_revtype1 IN ('OTR', 'INT', 'UNK'))
AND BillingRep.Rep IN ('LAURA', 'RHONDA')
AND Workflow.WF IN ('Check-In BOL')
ORDER BY OH.ord_hdrnumber,
OH.ord_refnum
用您正在使用的SQL Server数据库标记您的问题。您的查询在运行时显示列表还是单个结果?如果是一个,也许你应该使用一个外部的APPLY来进行分组,在WHERE子句中引用一个字段,将其有效地转换为一个交叉应用。查看BillingRep和Workflow以澄清:当您注释掉最后一个IN语句时,您的结果集中会有更多行,并且所有其他结果都具有与最后一列Workflow.WF匹配的值。你能确认一下吗?