查找一行中存在值的所有行

Find all lines where a value exists in one line

这是我的查询

        select order_no, pkg_no, zone_no
        from T_DETAIL_ITEM a 
        where order_no = 495
        order by order_no, pkg_no

对于给定的包裹,我有 zone number = 0

我需要做的是 return 所有带有 pkg_no = 1597 的行。因为存在一个零区域。

我尝试了几个不同的 'where exists' 行,但没有用。

尝试自行加入。 通过这种方式,您可以将您的要求放在第二个 table "instance" 中,但根据另一个公共字段从 table 匹配项中检索所有内容。

select distinct a.order_no, a.pkg_no, a.zone_no
        from T_DETAIL_ITEM a 
        join T_DETAIL_ITEM b on b.pkg_no = a.pkg_no
        where b.zone_no = 0
        order by a.order_no, a.pkg_no

如果我正确理解了这个问题,你需要这样的东西 开始

declare @str varchar(max);

set @str='';

SELECT  @str=@str+ [YOURCOLUMB]

  FROM [YOURTABLE]

SELECT @str

END

一种方法是在左联接中自引用 table,并且仅在联接子句中包含具有 zone_no=0 的那些。通过从左连接中排除不匹配的记录来过滤掉不匹配的记录,T2.pkg_no = NULL.

SELECT
    T1.pkg_no, T1.zone_no
FROM
    T_DETAIL_ITEM  T1
    LEFT OUTER JOIN T_DETAIL_ITEM T2 ON T2.pkg_no = T1.pkg_no AND T2.zone_no = 0
WHERE
    NOT T2.pkg_no IS NULL   

接受的答案很好,但我看到你注意到你试过 EXISTS,所以我用那个方法写了这个例子。

SELECT *
FROM T_Detail_Item  d
WHERE exists (SELECT * FROM T_Detail_Item  dx WHERE dx.pkg_no = d.pkg_no AND dx.zone_no = 0)