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,列'状态'只有"新"和"活动"被选中
试试这个:
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) = 2与WHERE 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)
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |