Sql 选择字段包含特定项和任何其他项的位置

Sql 选择字段包含特定项和任何其他项的位置,sql,Sql,假设我有下表 ID | Trans_id 1 | 10 2 | 20 2 | 20 2 | 20 2 | 20 2 | 10 3 | 20 4 | 20 5 | 10 6 | 10 如何选择trans_ID包含20且具有另一个不同编号的ID,无论它是什么(在本例中,我应仅返回ID 2)?您可以使用聚合和having: select id from t group by id having sum(case when trans_id = 20 then 1 else 0

假设我有下表

ID | Trans_id 
1  | 10
2  | 20 
2  | 20
2  | 20
2  | 20
2  | 10
3  | 20
4  | 20
5  | 10
6  | 10

如何选择trans_ID包含20且具有另一个不同编号的ID,无论它是什么(在本例中,我应仅返回ID 2)?

您可以使用聚合和
having

select id
from t
group by id
having sum(case when trans_id = 20 then 1 else 0 end) > 0 and
       sum(case when trans_id <> 20 then 1 else 0 end) > 0;
选择id
从t
按id分组
总和(当trans_id=20时,则为1,否则为0结束)>0,且
总和(当trans_id 20然后1或0结束时的情况)>0;

您可以使用聚合和
拥有

select id
from t
group by id
having sum(case when trans_id = 20 then 1 else 0 end) > 0 and
       sum(case when trans_id <> 20 then 1 else 0 end) > 0;
选择id
从t
按id分组
总和(当trans_id=20时,则为1,否则为0结束)>0,且
总和(当trans_id 20然后1或0结束时的情况)>0;

或者,使用
存在

Select distinct Id from table t
Where trans_id = 20
   and exists (Select * from table 
               Where ID = t.Id
                  and trans_id != 20)

或者,使用
exists

Select distinct Id from table t
Where trans_id = 20
   and exists (Select * from table 
               Where ID = t.Id
                  and trans_id != 20)

您可以使用以下查询:

SELECT ID
FROM Table1
WHERE ID IN (SELECT DISTINCT ID FROM Table1 WHERE Trans_id = 20)
GROUP BY ID
HAVING COUNT(DISTINCT(Trans_id)) > 1

子查询仅选择包含
Trans\u ID=20
、按ID分组的
+
具有COUNT(DISTINCT(Trans\u ID))>1的ID
确保此组中有其他Trans\u ID。

您可以使用此查询:

SELECT ID
FROM Table1
WHERE ID IN (SELECT DISTINCT ID FROM Table1 WHERE Trans_id = 20)
GROUP BY ID
HAVING COUNT(DISTINCT(Trans_id)) > 1
子查询仅选择包含
Trans\u ID=20
、具有COUNT(DISTINCT(Trans\u ID))>1的
分组ID
+
确保此组中有其他Trans\u ID。

将起作用:

   SELECT DISTINCT ID FROM MyTable WHERE Trans_id = 20
这将起作用:

   SELECT DISTINCT ID FROM MyTable WHERE Trans_id = 20

不,不会的。在OP的示例中,它将返回
2、3、4
,3和4不正确,因为没有其他Trans\u ID'no,它不会。在OP的示例中,它将返回
2、3、4
,3和4不正确,因为没有其他Trans\u ID