根据其他列条件

时间:2015-05-05 07:38:44

标签: sql sql-server sql-server-2008 tsql

我有一个SQL表结构,如:

ID UID  Name   PId  Date
1   2   Admin   1   2015-04-25 21:10:40.060
3   28  Admin   1   2015-04-25 21:10:53.873
4   3   Viewer  1   2015-04-25 22:49:12.497
5   7   Admin   1   2015-04-25 22:49:34.670
6   28  Admin   2   2015-05-04 10:41:17.000

ID-> autoincrement, UID->UserId, PID-> projectId

此处可以将用户分配给一个或多个项目。因此,我将用户28分配给两个项目PID:1和2。

我希望所有未分配的用户都进行项目2.(即我的结果应该包含UID 2,3和7)。对于项目1,它将是没有。

任何帮助都将不胜感激。

修改

这就是我的尝试:

select UId 
from A 
group where PId!=2 by uId having COUNT(*)<2 

我得到的数据是:

   UID  PID
    2   1
    3   1
    7   1
    28  1

最后一条记录UID = 28是不需要的行

1 个答案:

答案 0 :(得分:2)

您可以在NOT IN子句中使用WHERE运算符

SELECT *
FROM yourtableName
WHERE UID NOT IN (SELECT UID
                  FROM #test
                  WHERE PID = 2)

SQLFiddle