2016-02-08 53 views
-3

我有这些表从数据库。工作台有2个字段,其中一个是ID_W(数字),另一个是DUTY(文本)。 工作(ID_W,DUTY)SQL查询usng SELECT语句

我想创建一个sql查询,它只选择具有相同DUTY的ID_W(工号的id),其中DUTY是文本类型字段。 有人可以帮我吗?我想使用一个聚合函数,但它们都没有帮助。

+0

你是什么意思*其中DUTY是文本类型字段*? – Siyual

+0

工作台有两个字段,其中一个是ID_W,另一个是DUTY – Doen

回答

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

如果我正确地理解你的问题,你正在寻找工人的ID其DUTY字段匹配另一名工人。

您可以使用WHERE EXISTS子句执行此操作,但您需要将TEXT列的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) 
)