SQL select语句,用于检查两列并从第三列返回值

SQL select语句,用于检查两列并从第三列返回值,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我正在编写一个访问同一数据库中多个表的查询。对于select语句中的一列,我需要返回 表1.4 其中Table1.Column=Table3.Column1和 表1.Column2=表4.Column1 我把它写为: SELECT AccNum.FieldValue FROM PersonFieldValuesVW INNER JOIN PersonFieldValuesVW AccNum ON AccNum.PersonId = InPerson.PersonId INNER

我正在编写一个访问同一数据库中多个表的查询。对于select语句中的一列,我需要返回

表1.4 其中Table1.Column=Table3.Column1和 表1.Column2=表4.Column1

我把它写为:

SELECT AccNum.FieldValue 
FROM  PersonFieldValuesVW 
INNER JOIN PersonFieldValuesVW AccNum 
ON AccNum.PersonId = InPerson.PersonId
     INNER JOIN InPerson 
     ON InPerson.IncidentId = Incident.Id 
WHERE AccNum.FieldDescr like '%Account Number%') as [Account Number],
这将返回错误:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
这是完整的查询,如有任何帮助,将不胜感激

SELECT DISTINCT
    CaseNum as [Case Number],
    ALCategoryVW.Category as [Category],
    ALCategoryVW.SubCategory as [Sub Category],
    InAssign.AssignToName as [Assigned To],
    ReportedDate as [Open Date],
    EndDate as [Closed Date], --This a placeholder for a closed date
    [Status],
    SiteLoc1.Descr as [Loss Location],
    LocDetails as [Loss Cost Center],
    SiteLoc1.Region as [Region],
    SiteLoc1.SubRegion as [Sub Region],
    -- SiteLoc2.Descr as [Location Description], **Need this though returning all for the location?
    CASE WHEN SAR.FieldId = '604NU' and SAR.FieldValue <> 'False' THEN 'YES' ELSE 'NO' END as [SAR Required],
    Summary as [Incident Summary],
    Disposition as [Case Disposition],
    (
        SELECT AccNum.FieldValue
        FROM  PersonFieldValuesVW
        INNER JOIN PersonFieldValuesVW AccNum ON AccNum.PersonId = InPerson.PersonId
        INNER JOIN InPerson ON InPerson.IncidentId = Incident.Id
        WHERE AccNum.FieldDescr like '%Account Number%'
    ) as [Account Number],
    FORMAT(AuditItemDetail.ItemValue, '#,###') as [Potential Loss],
    FORMAT(AuditItemDetail.ItemValue - AuditItemDetail.PreventedExposureAmount, '#,###') as [Actual Loss]
FROM Incident
INNER JOIN ALCategoryVW ON ALCategoryVW.IncidentId = Incident.Id
INNER JOIN InAssign ON InAssign.IncidentId = Incident.Id
INNER JOIN SiteLoc1 ON SiteLoc1.Id = Incident.LocId
INNER JOIN SiteLoc2 ON SiteLoc2.SiteLoc1Id = SiteLoc1.Id
INNER JOIN IncidentFieldValuesVW SAR ON SAR.IncidentId = Incident.Id
INNER JOIN InItem ON InItem.IncidentId = Incident.Id
INNER JOIN AuditItemDetail ON AuditItemDetail.ItemId = InItem.ItemId
INNER JOIN InPerson ON InPerson.IncidentId = Incident.Id
INNER JOIN PersonFieldValuesVW AccNum ON AccNum.PersonId = InPerson.PersonId

这应该可以解决您的错误,但我不确定它在逻辑上是否正确。如果有两条记录在子列表中返回,请选择正确的记录

SELECT DISTINCT
    CaseNum as [Case Number],
    ALCategoryVW.Category as [Category],
    ALCategoryVW.SubCategory as [Sub Category],
    InAssign.AssignToName as [Assigned To],
    ReportedDate as [Open Date],
    EndDate as [Closed Date], --This a placeholder for a closed date
    [Status],
    SiteLoc1.Descr as [Loss Location],
    LocDetails as [Loss Cost Center],
    SiteLoc1.Region as [Region],
    SiteLoc1.SubRegion as [Sub Region],
    -- SiteLoc2.Descr as [Location Description], **Need this though returning all for the location?
    CASE WHEN SAR.FieldId = '604NU' and SAR.FieldValue <> 'False' THEN 'YES' ELSE 'NO' END as [SAR Required],
    Summary as [Incident Summary],
    Disposition as [Case Disposition],
    AccNum.FieldValue,
    FORMAT(AuditItemDetail.ItemValue, '#,###') as [Potential Loss],
    FORMAT(AuditItemDetail.ItemValue - AuditItemDetail.PreventedExposureAmount, '#,###') as [Actual Loss]
FROM Incident
INNER JOIN ALCategoryVW ON ALCategoryVW.IncidentId = Incident.Id
INNER JOIN InAssign ON InAssign.IncidentId = Incident.Id
INNER JOIN SiteLoc1 ON SiteLoc1.Id = Incident.LocId
INNER JOIN SiteLoc2 ON SiteLoc2.SiteLoc1Id = SiteLoc1.Id
INNER JOIN IncidentFieldValuesVW SAR ON SAR.IncidentId = Incident.Id
INNER JOIN InItem ON InItem.IncidentId = Incident.Id
INNER JOIN AuditItemDetail ON AuditItemDetail.ItemId = InItem.ItemId
INNER JOIN InPerson ON InPerson.IncidentId = Incident.Id
LEFT JOIN PersonFieldValuesVW AccNum ON AccNum.PersonId = InPerson.PersonId AND AccNum.FieldDescr like '%Account Number%'

***根据评论更新。

您是否阅读了错误消息?子查询在只允许返回一个值的上下文中返回多个值。e、 g.2+记录和/或2+字段。为什么首先需要子查询?你的主查询中已经有了那张表。@Kevin-这里的人在答案显而易见的时候可能会变得筋疲力尽!。不要把他们的消极情绪放在心上。如果有合法的理由来结束这个问题,这个问题过于宽泛,与编程无关,等等,那么它必须由至少5个其他用户投票决定。@StingyJack NP。我通常认为最好不要从左向右、上下滚动来查看全文。我还发现,在一行中显示输出列别名会使阅读更容易。@KevinSchultz,当你阅读一个问题时,该问题解决了你遇到的同一个错误,并且有一些差异导致该答案对你没有帮助,这正是你在发布问题时应该包含的内容。如前所述,您的问题看起来好像没有努力研究错误消息,这是人们在这里投票的主要原因。在这种情况下,一个人可能有许多账号,因此我希望所有账号都与其他两列匹配。然后您需要加入允许0-*匹配您的账号数据,不使用子查询假定有一个匹配项。