提问人:Alvaro 提问时间:9/12/2020 最后编辑:Alvaro 更新时间:9/12/2020 访问量:327
SQL 根据列值条件返回行
SQL return rows based on column value condition
问:
我有下面的表格
订单表
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
每个子类别属于一个类别。
现在,我想为以下要求编写一个查询。
仅返回 (7,8) 的订单
CategoryID
1.1 如果订单有 (1,4) 仅返回在跟踪表中有记录的订单 与表中相同。 并且该订单不应在跟踪中具有 (5,6) 桌子。
SubCategoryID
CountryID
Order
TrackingTypeID
1.2 如果订单有 (2,6),则该订单必须 在表中有一个记录,并且该顺序不应在表中包含 (5,6)
SubCategoryID
Reviewed
TrackingTypeID
Tracking
排除所有不属于 (7,8) 的订单
SubCategoryID
CategoryID
我写了下面的脚本,但问题是它总是只运行第二个条件。并且不会返回满足第一个条件的订单。 但是,如果我只使用第一个条件运行脚本,我就会得到这些订单。我不知道我在这里做错了什么。
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))
)
答: 暂无答案
评论