我有一个包含UserID和Departments的表。 UserID可以属于多个部门,因此他们的组合使其独一无二。
但是我一直在尝试查询试图找到UserID属于两个部门(hr或customer)之一的位置。
SELECT UserId, Dept, COUNT(*) Total
FROM MyTable
GROUP BY UserID
HAVING COUNT(*) = 1
然而,如果UserId同时拥有两个部门,这仍然会带来重复,因为组合使它成为一个独特的记录。
我得到的是这个
UserID | Department | Total 1 hr 1 2 customer 1 3 customer 1 1 customer 1 3 hr 1
但是我想要回来的是这个
UserID | Department | Total 2 customer 1
如果属于这两个部门的UserId的任何实例只有在属于这两个部门时才包括在内。
答案 0 :(得分:1)
这应该做的工作
select t1.UserId, Dept, t2.Total
FROM MyTable t1
INNER JOIN
(
SELECT UserId, COUNT(*) Total
FROM Table1
GROUP BY UserID
HAVING COUNT(*) = 1
) t2 on t1.UserId = t2.UserId
答案 1 :(得分:0)
我不认为上面的查询会运行,因为Dept不在group by子句中,并且也不能以这种方式计算comparsion。
来你的问题:
Select userid, Dept
from #temp
where userid in (Select userid from (Select userid,count(*) 'C'
from #temp group by userid ) u where u.c=1)
我认为你不需要数,因为它总是1
答案 2 :(得分:0)
尝试
SELECT UserId, COUNT(distinct Dept) Total
FROM MyTable
GROUP BY UserID
HAVING COUNT(distinct Dept) = 1
答案 3 :(得分:0)
您可以尝试这样的事情
select UserId, Dept
FROM Mytable where UserId in
(
SELECT UserId, COUNT(*) Total
FROM MyTable
GROUP BY UserID
HAVING COUNT(*) = 1
)
如果您在“组”中添加“部门”列,则始终会检索所有组合。 因此,您必须选择只有一个部门的所有用户,然后检索其他信息
可能存在语法错误,因为我通常使用oracle,但我认为这个概念是正确的
答案 4 :(得分:0)
这将选择' hr'那些没有客户身份的客户'然后用户'客户'在' hr'。中没有ID 我没有包含计数,因为它总是只有一个。
SELECT * FROM [MyTable] T WHERE Department = 'hr' AND NOT EXISTS (SELECT 1 FROM [MyTable] WHERE [MyTable].UserID =T.UserID AND Department = 'customer') UNION
SELECT * FROM [MyTable] T WHERE Department = 'customer' AND NOT EXISTS (SELECT 1 FROM [MyTable] WHERE [MyTable].UserID =T.UserID AND Department = 'hr')
答案 5 :(得分:0)
问题是最后的COUNT (*)
。
试试这个:
SELECT UserId, Dept, COUNT(*) Total
FROM MyTable
GROUP BY UserID
HAVING COUNT(UserId) = 1
答案 6 :(得分:0)
这是一个假问题,因为您无法在此查询中使用Dept。 我不明白为什么作者没有向我们解释任何编译器警告,并告诉我们这个查询的一些结果。
但如果你真的想得到一些结果,你可以这样说:
SELECT UserId, min(Dept) as Dept
FROM MyTable
GROUP BY UserID
HAVING COUNT(*) = 1