SSMS查询需求:当SKU存在符合条件行时返回其全部行
解决SSMS中按Reason过滤并返回对应SKU全部行的需求
嘿,作为SSMS新手碰到这种需求完全不用慌,这其实是个很典型的「先找符合条件的分组,再取分组内所有数据」的场景,我给你两种简单易懂的实现方法:
方法一:子查询(直观易读)
这种方式逻辑最清晰,先找出所有包含目标Reason的SKU,再把这些SKU的所有记录都查出来。比如你要过滤Reason='r1'的情况,SQL语句如下:
-- 替换YourTableName为你的实际表名 SELECT * FROM YourTableName WHERE SKU IN ( -- 子查询:找出所有包含r1的SKU SELECT SKU FROM YourTableName WHERE Reason = 'r1' );
执行这条语句后,就会返回s1、s2、s3的所有行——正好符合你要的「返回所有包含该Reason的SKU的全部行」的要求。
方法二:自连接(适合大数据量场景)
如果你的数据表数据量很大,自连接的性能可能更优,原理是通过关联同一个表的SKU字段,把包含目标Reason的SKU的所有记录筛选出来:
-- 替换YourTableName为你的实际表名 SELECT DISTINCT t1.* FROM YourTableName t1 JOIN YourTableName t2 ON t1.SKU = t2.SKU WHERE t2.Reason = 'r1';
这里的DISTINCT是为了避免重复行(如果你的表本身没有重复记录,也可以去掉),同样能得到你需要的结果。
进阶:动态指定Reason
如果你想快速切换不同的Reason过滤,还可以用SSMS的变量来实现,不用每次改SQL语句:
DECLARE @TargetReason VARCHAR(50) = 'r1'; -- 这里直接修改Reason的值即可 SELECT * FROM YourTableName WHERE SKU IN ( SELECT SKU FROM YourTableName WHERE Reason = @TargetReason );
这样你只要改@TargetReason的值,就能轻松切换过滤条件啦~
内容的提问来源于stack exchange,提问作者user1982519
相关产品推荐
相关产品推荐

