我从数据库中获取这些表。表WORKER有2个字段,其中一个是ID_W(数字),另一个是DUTY(文本)。 员(ID_W,DUTY)
我想创建一个sql查询,只选择ID_W(worker的id),它具有相同的DUTY,其中DUTY是文本类型字段。 有人能帮我吗?我想使用聚合函数,但它们都没有帮助。
答案 0 :(得分:1)
我使用临时表作为示例,但这会做你想要的我相信的事情:
SELECT Duty,
STUFF((
SELECT ', ' + CAST(ID_W AS VARCHAR(MAX))
FROM #WORKER
WHERE Duty = T.DUTY
FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
,1,2,'') AS IDs FROM #WORKER T
GROUP BY Duty
答案 1 :(得分:1)
如果我正确理解您的问题,那么您正在寻找仅 DUTY
字段与其他工作人员匹配的工作人员的ID。
您可以使用WHERE EXISTS
子句执行此操作,但您需要将CONVERT
列TEXT
列添加到VARCHAR (MAX)
中才能进行比较。双方的这种转换会使查询变得昂贵,但这是另一种方法:
Select ID_W
From WORKER A
Where Exists
(
Select *
From WORKER B
Where A.ID_W <> B.ID_W
And Convert(Varchar (Max), A.DUTY) = Convert(Varchar (Max), B.DUTY)
)