选择distinct返回重复项

时间:2014-11-19 11:11:32

标签: sql oracle

我有以下查询:

SELECT 
DISTINCT (TK.TICKETID),
TK.DESCRIPTION,
TK.CREATIONDATE,
TK.REPORTEDBY,
TK.OWNER,
WF.ASSIGNCODE
FROM ticket TK
INNER JOIN wfassignment WF on WF.OWNERID = TK.TICKETUID
WHERE TK.status not in ('ЧЕРНОВИК', 'ЗАКРЫТ', 'ВЫПОЛНЕН') AND WF.ASSIGNSTATUS not in ('COMPLETE', 'INACTIVE')
ORDER BY TK.TICKETID;

但它在TK.TICKETID属性中返回重复项。如果我删除其他属性都可以。 e.g。

TK.TICKETID TK.DESCRIPTION TK.CREATIONDATE  TK.REPORTEDBY  TK.OWNER     WF.ASSIGNCODE
О1013249    Право доступа   02.06.14        CHERNOVDK      SKACHKOVSV   NOVIKOVVA
О1013249    Право доступа   02.06.14        CHERNOVDK      SKACHKOVSV   PRITULADV
О1013249    Право доступа   02.06.14        CHERNOVDK      SKACHKOVSV   SVESHNIKOVAV

M.B。我的问题很简单,但我自己无法解决。 对任何形式的帮助都会很有帮助。

2 个答案:

答案 0 :(得分:3)

试试这个:

SELECT 
TK.TICKETID,
TK.DESCRIPTION,
TK.CREATIONDATE,
TK.REPORTEDBY,
TK.OWNER,
max(WF.ASSIGNCODE)
FROM ticket TK
INNER JOIN wfassignment WF on WF.OWNERID = TK.TICKETUID
WHERE TK.status not in ('ЧЕРНОВИК', 'ЗАКРЫТ', 'ВЫПОЛНЕН') AND WF.ASSIGNSTATUS not in ('COMPLETE', 'INACTIVE')
group by
TK.TICKETID,
TK.DESCRIPTION,
TK.CREATIONDATE,
TK.REPORTEDBY,
TK.OWNER
ORDER BY TK.TICKETID;

答案 1 :(得分:2)

选择查询中有多个列,查询检查所有列的唯一性,而不仅仅是括号中的列。

SQL DISTINCT关键字与SELECT语句结合使用,以消除所有重复记录,并仅获取唯一的记录。请注意,不仅仅是列

如果您将查询修改为:

SELECT 
DISTINCT (TK.TICKETID),
TK.DESCRIPTION,
TK.CREATIONDATE,
TK.REPORTEDBY,
TK.OWNER
FROM ticket TK
INNER JOIN wfassignment WF on WF.OWNERID = TK.TICKETUID
WHERE TK.status not in ('ЧЕРНОВИК', 'ЗАКРЫТ', 'ВЫПОЛНЕН') AND WF.ASSIGNSTATUS not in ('COMPLETE', 'INACTIVE')
ORDER BY TK.TICKETID;

你只会得到一个结果。

在输出中,请注意以下内容,已加星标的是不同的。

TK.TICKETID TK.DESCRIPTION TK.CREATIONDATE  TK.REPORTEDBY  TK.OWNER     **WF.ASSIGNCOD**E
О1013249    Право доступа   02.06.14        CHERNOVDK      SKACHKOVSV   **NOVIKOVVA**
О1013249    Право доступа   02.06.14        CHERNOVDK      SKACHKOVSV   **PRITULADV**
О1013249    Право доступа   02.06.14        CHERNOVDK      SKACHKOVSV   **SVESHNIKOVAV**