选择一行基于两列,一列带有ID,另一列带有列中的特定值

Ven*_*ish 3 sql sql-server sql-server-2008

我想根据特定的列值和SQL中的唯一id列选择行

表I如下

    Acc_id | Name   |  Status    | value
    ----------------------------------------
      101  |  com   |  Active    |  1
      202  |  net   |  Active    |  2
      202  |  net   |  New       |  3
      303  |  com   |  Active    |  1 
      303  |  com   |  New       |  4
      303  |  com   |  Inactive  |  2
      404  |  org   |  Active    |  5
      404  |  org   |  Inactive  |  6
      505  |  gov   |  New       |  2
      505  |  gov   |  Active    |  3 
Run Code Online (Sandbox Code Playgroud)

我希望得到下表

    Acc_id | Name   |  Status    | value
    ----------------------------------------
      202  |  net   |  Active    |  2
      202  |  net   |  New       |  3
      303  |  com   |  Active    |  1 
      303  |  com   |  New       |  4
      505  |  gov   |  New       |  2
      505  |  gov   |  Active    |  3 
Run Code Online (Sandbox Code Playgroud)

正如您在上面看到的,来自'Acc_id'列的相同ID,列'状态'只有"新"和"活动"被选中

Mah*_*mal 5

试试这个:

SELECT
  t1.*
FROM table1 AS t1
INNER JOIN
(
  SELECT Acc_id
  FROM table1
  WHERE status IN('Active', 'New')
  GROUP BY Acc_id
  HAVING COUNT(DISTINCT status) = 2
) AS t2 ON t1.Acc_id = t2.Acc_id 
WHERE t1.status IN('Active', 'New');
Run Code Online (Sandbox Code Playgroud)

HAVING COUNT(DISTINCT status) = 2WHERE status IN('Active', 'New')将确保所选择的Acc_id只有两种状态active,并new没有更多的,则JOIN与原来的表来获取列的结果.

这会给你:

| ACC_ID | NAME | STATUS | VALUE |
|--------|------|--------|-------|
|    202 |  net | Active |     2 |
|    202 |  net |    New |     3 |
|    303 |  com | Active |     1 |
|    303 |  com |    New |     4 |
|    505 |  gov |    New |     2 |
|    505 |  gov | Active |     3 |
Run Code Online (Sandbox Code Playgroud)