SQL 根据列值条件返回行

SQL return rows based on column value condition

提问人:Alvaro 提问时间:9/12/2020 最后编辑:Alvaro 更新时间:9/12/2020 访问量:327

问:

我有下面的表格

订单表

OrderNo  CategoryID  SubCategoryID  CountryID
 100         7         1             3
 200         8         2             5
 300         7         2             4
 400         2         6             2

跟踪表

OrderNo  CountryID   TrackingTypeID
 100        2             1
 200        1             2
 100        3             3
 400        5             5
 200        2             2

已审核的表格

 OrderNo 
   300
   100
   200

预期结果

OrderNo  SubCategoryID  CategoryID  CountryID   CountryID   
  100       1             7            3           3
  200       2             8            5           5
  300       2             7            4           4

每个子类别属于一个类别。

现在,我想为以下要求编写一个查询。

  1. 仅返回 (7,8) 的订单CategoryID

    1.1 如果订单有 (1,4) 仅返回在跟踪表中有记录的订单 与表中相同。 并且该订单不应在跟踪中具有 (5,6) 桌子。SubCategoryIDCountryIDOrderTrackingTypeID

    1.2 如果订单有 (2,6),则该订单必须 在表中有一个记录,并且该顺序不应在表中包含 (5,6)SubCategoryIDReviewedTrackingTypeIDTracking

  2. 排除所有不属于 (7,8) 的订单SubCategoryIDCategoryID

我写了下面的脚本,但问题是它总是只运行第二个条件。并且不会返回满足第一个条件的订单。 但是,如果我只使用第一个条件运行脚本,我就会得到这些订单。我不知道我在这里做错了什么。

SELECT DISTINCT o.orderNo , o.subCategoryId , o.categoryId ,
            o.countryId , Tracking.countryId

FROM [Order] o

JOIN Tracking ON o.orderNo = Tracking.orderNo 

WHERE
 (o.subCategoryId IN (1,4 ) AND o.countryId = Tracking.countryId  AND
   EXISTS (SELECT 1
           FROM tracking t
           WHERE t.orderNo = o.orderNo AND t.countryId = o.countryId)
           AND NOT EXISTS ( SELECT 1
                 FROM tracking t
                 WHERE t.orderNo = o.orderNo 
                 AND TrackingTypeID IN (5,6))
          
        )
        
  OR
   
  (o.subCategoryId  in (
      SELECT id FROM subCatgory WHERE categoryId in (7,8)
      AND  ID NOT IN (1 , 4)
      ) 
      AND EXISTS (SELECT 1
           FROM Reviewed r
           WHERE r.orderNo = r.orderNo
          )

      AND NOT EXISTS ( SELECT 1
                 FROM tracking t
                 WHERE t.orderNo = o.orderNo 
                 AND TrackingTypeID IN (5,6))
  ) 
布尔逻辑 sql 函数

评论

0赞 jarlh 9/12/2020
这里的大多数人都希望示例表数据和预期结果以格式化文本的形式呈现,而不是以图像(或指向图像的链接)的形式呈现。
0赞 Alvaro 9/12/2020
我会更新它。我虽然它作为图像的可读性很高
0赞 jarlh 9/12/2020
首先指定预期结果 - 这样我们就不必猜测我们是否理解了问题。
0赞 Alvaro 9/12/2020
对于给您带来的不便,我深表歉意。我更新了问题
0赞 jarlh 9/12/2020
没关系!我们都是来学习的。

答: 暂无答案