识别两个不同列中具有两个相同值的记录?
Identify records with two identical values in two different columns?
我有一个 table 的学生 ID、专业 1、专业 2 和辅修。我想确定那些为同一专业注册两次的学生的记录。我需要一个函数来 select 只有那些拥有相同专业的人,例如 Major1 和 Major2 列中的 "FIN"。我到目前为止:
CREATE VIEW A5T5 AS
SELECT (firstname || ' ' || lastname)"FullName", StudentID AS "StudentID", Major1 as "DoubleDipping"
FROM A5
Group by Major1, Major2 ?????
Having count ?????
ORDER BY Major,LastName,FirstName;
为什么不这么简单:
SELECT 名字,姓氏 FROM A5 WHERE Major1 = Major2
我认为你让这比现在更难了。如果我正确理解了您的问题,则以下查询应该可以为您提供所需的信息:
SELECT (firstname || ' ' || lastname) AS "FullName",
StudentID AS "StudentID",
Major1 as "DoubleDipping"
FROM A5
WHERE MAJOR1 = MAJOR2
如果您确实需要将其作为函数,return 结果集的常用方法是 return 打开 SYS_REFCURSOR
调用者随后负责关闭。例如:
CREATE OR REPLACE FUNCTION DOUBLE_DIPPING_STUDENTS
RETURN SYS_REFCURSOR
IS
csr SYS_REFCURSOR;
BEGIN
OPEN csr FOR SELECT (firstname || ' ' || lastname) AS "FullName",
StudentID AS "StudentID",
Major1 as "DoubleDipping"
FROM A5
WHERE MAJOR1 = MAJOR2;
RETURN csr;
END DOUBLE_DIPPING_STUDENTS;
上述函数可以从 PL/SQL
块调用为:
DECLARE
csr SYS_REFCURSOR;
strNAME VARCHAR2(2000);
nID A5.STUDENTID%TYPE;
strMAJOR A5.MAJOR1%TYPE;
BEGIN
csr := DOUBLE_DIPPING_STUDENTS;
LOOP
FETCH csr
INTO NAME, ID, MAJOR;
WHEN csr%NOTFOUND THEN EXIT;
DBMS_OUTPUT.PUT_LINE(strNAME || ' ' || nID || ' ' || strMAJOR);
END LOOP;
CLOSE csr;
END;
我有一个 table 的学生 ID、专业 1、专业 2 和辅修。我想确定那些为同一专业注册两次的学生的记录。我需要一个函数来 select 只有那些拥有相同专业的人,例如 Major1 和 Major2 列中的 "FIN"。我到目前为止:
CREATE VIEW A5T5 AS
SELECT (firstname || ' ' || lastname)"FullName", StudentID AS "StudentID", Major1 as "DoubleDipping"
FROM A5
Group by Major1, Major2 ?????
Having count ?????
ORDER BY Major,LastName,FirstName;
为什么不这么简单:
SELECT 名字,姓氏 FROM A5 WHERE Major1 = Major2
我认为你让这比现在更难了。如果我正确理解了您的问题,则以下查询应该可以为您提供所需的信息:
SELECT (firstname || ' ' || lastname) AS "FullName",
StudentID AS "StudentID",
Major1 as "DoubleDipping"
FROM A5
WHERE MAJOR1 = MAJOR2
如果您确实需要将其作为函数,return 结果集的常用方法是 return 打开 SYS_REFCURSOR
调用者随后负责关闭。例如:
CREATE OR REPLACE FUNCTION DOUBLE_DIPPING_STUDENTS
RETURN SYS_REFCURSOR
IS
csr SYS_REFCURSOR;
BEGIN
OPEN csr FOR SELECT (firstname || ' ' || lastname) AS "FullName",
StudentID AS "StudentID",
Major1 as "DoubleDipping"
FROM A5
WHERE MAJOR1 = MAJOR2;
RETURN csr;
END DOUBLE_DIPPING_STUDENTS;
上述函数可以从 PL/SQL
块调用为:
DECLARE
csr SYS_REFCURSOR;
strNAME VARCHAR2(2000);
nID A5.STUDENTID%TYPE;
strMAJOR A5.MAJOR1%TYPE;
BEGIN
csr := DOUBLE_DIPPING_STUDENTS;
LOOP
FETCH csr
INTO NAME, ID, MAJOR;
WHEN csr%NOTFOUND THEN EXIT;
DBMS_OUTPUT.PUT_LINE(strNAME || ' ' || nID || ' ' || strMAJOR);
END LOOP;
CLOSE csr;
END;