[英]Distinct rows get from a column. Oracle
我想基于运算符显示不同的行。 喜欢
$query = oci_parse($con, "SELECT POST.*, USER_LOGIN.*, STATION.*, ROLE.*
FROM USER_LOGIN
INNER JOIN STATION ON USER_LOGIN.S_ID = STATION.S_ID
INNER JOIN POST ON USER_LOGIN.USER_ID = POST.USER_ID
INNER JOIN ROLE ON USER_LOGIN.ROLE_ID = ROLE.ROLE_ID
WHERE ROLE_NAME = 'Operator' ");
任何帮助,将不胜感激。
我现在得到以下错误。 我不知道这是怎么回事。
Error: ORA-00936: missing expression
$query = oci_parse($con,"SELECT * FROM
(SELECT POST.*, USER_LOGIN.*, STATION.*, ROLE.*, IR.*,
row_number() over(PARTITION BY ROLE_NAME ORDER BY ROLE_NAME) AS seqnum
FROM USER_LOGIN
INNER JOIN
STATION
ON USER_LOGIN.PS_ID = STATION.PS_ID
INNER JOIN
POST
ON USER_LOGIN.USER_ID = POST.USER_ID
INNER JOIN
ROLE
ON USER_LOGIN.ROLE_ID = ROLE.ROLE_ID
INNER JOIN
IR
ON USER_LOGIN.USER_ID = IR.USER_ID
WHERE ROLE_NAME = 'Operator') AS t
WHERE t.seqnum = 1");
我的猜测是您想指定特定的列并使用distinct
(或group by
):
SELECT DISTINCT operator, cnic, station
FROM USER_LOGIN INNER JOIN
STATION
ON USER_LOGIN.S_ID = STATION.S_ID INNER JOIN
POST
ON USER_LOGIN.USER_ID = POST.USER_ID INNER JOIN
ROLE
ON USER_LOGIN.ROLE_ID = ROLE.ROLE_ID
WHERE ROLE_NAME = 'Operator';
编辑:
如果要任意行,请执行以下操作:
SELECT *
FROM (SELECT POST.*, USER_LOGIN.*, STATION.*, ROLE.*,
row_number() over (partition by operator, cnic, station order by operator) as seqnum
FROM USER_LOGIN INNER JOIN
STATION
ON USER_LOGIN.S_ID = STATION.S_ID INNER JOIN
POST
ON USER_LOGIN.USER_ID = POST.USER_ID INNER JOIN
ROLE
ON USER_LOGIN.ROLE_ID = ROLE.ROLE_ID
WHERE ROLE_NAME = 'Operator'
) t
WHERE seqnum = 1;
row_number()
函数枚举组中的行。 每个组都从1开始。分组是通过partition by
定义的,因此具有operator
, cnic
和station
相同值的行将在分组中。 order by
指定组中数字的顺序。 这里为组使用一个常量,因此它是任意的。 最后一步是where seqnum = 1
,它从每个分组中选择一行。
来自: http : //docs.oracle.com/cd/B28359_01/server.111/b28286/statements_10002.htm#SQLRF55166
如果希望数据库仅返回所选的每组重复行的一个副本,则指定DISTINCT或UNIQUE。
像这样更新您的代码:
$query = oci_parse($con, "SELECT DISTINCT POST.*, USER_LOGIN.*, STATION.*, ROLE.*
FROM USER_LOGIN
INNER JOIN STATION ON USER_LOGIN.S_ID = STATION.S_ID
INNER JOIN POST ON USER_LOGIN.USER_ID = POST.USER_ID
INNER JOIN ROLE ON USER_LOGIN.ROLE_ID = ROLE.ROLE_ID
WHERE ROLE_NAME = 'Operator' ");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.