2015-07-01 191 views
1

我有一张学生证,major1,major2和minor的表格。我想确定那些为同一专业注册两次的学生的记录。我需要一个函数来选择只有那些像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; 

回答

1

我认为你正在做这个难度比它是。如果我正确理解你的问题下面的查询应该给你你在找什么:

SELECT (firstname || ' ' || lastname) AS "FullName", 
     StudentID AS "StudentID", 
     Major1 as "DoubleDipping" 
    FROM A5 
    WHERE MAJOR1 = MAJOR2 

如果你真的需要这是一个函数,通常的方式返回结果集将返回开呼叫者然后将负责关闭的SYS_REFCURSOR。例如:

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; 
+1

OMG感谢你:

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块作为被称为!这是我第二周学习sql,对不起,这比我想象的要简单得多。 好的,那么如果我必须在三列(Major1,Major2,Minor)中的至少两列宣布同一个纪律时如何处理这个问题? SELECT(姓名|| '' ||姓氏)AS “全名”, StudentID AS “StudentID”, Major1为 “DoubleDipping” FROM AS WHERE MAJOR1 = MAJOR2 OR MAJOR1 =轻微或MAJOR2 = MINOR 上午我纠正? @ john3136 –

+1

请问,作为一个单独的问题。谢谢。 –

1

为什么不是那样简单:

SELECT名字,姓氏FROM A5 WHERE Major1 = Major2

相关问题