을 원하는 나는이 두 기능 썼다 :SQL 기능 내가
USE muziekdatabase
GO
CREATE FUNCTION fnSpecNivAantal
(
@Niveau as char(1)
)
RETURNS char(1)
AS
BEGIN
DECLARE @Aantal AS int
IF @Niveau = 'A'
SET @Aantal = (SELECT COUNT(*) FROM STUK WHERE niveaucode = 'A')
ELSE IF @Niveau = 'B'
SET @Aantal = (SELECT COUNT(*) FROM STUK WHERE niveaucode = 'B')
ELSE IF @Niveau = 'C'
SET @Aantal = (SELECT COUNT(*) FROM STUK WHERE niveaucode = 'C')
RETURN @Aantal
END
USE muziekdatabase
GO
ALTER FUNCTION fnHoogsteNummer
(
@EersteNummer as numeric,
@TweedeNummer as numeric
)
RETURNS numeric
AS
BEGIN
DECLARE @HoogsteNummer as VARCHAR(MAX)
IF MAX(@Eerstenummer) > MAX(@TweedeNummer)
SET @HoogsteNummer = @EersteNummer
ELSE IF
MAX(@Tweedenummer) > MAX(@Eerstenummer)
SET @HoogsteNummer = @TweedeNummer
ELSE IF
@EersteNummer = @TweedeNummer
SET @HoogsteNummer = 'Nummers zijn gelijk'
ELSE
SET @HoogsteNummer = 'Er is iets fout gegaan'
RETURN @HoogsteNummer
END
을 이제 그들은 그들이해야처럼 거의 작동합니다. 그러나 그다지 옳지 않은 한 가지가 있습니다. 내 함수에 값을 삽입하면 결과는 같은 대답을 가진 전체 목록이됩니다. 단지 3 행 10 행처럼 번호 3 행 1이어야합니다. 나는 DISTINCT
, 사용할 수있는 알고 있지만 뭔가가 함수가 잘못 생각합니다. 나는 CASE/WHEN
을 사용하려고하지만 .. 하나
사용중인 dbms에 태그를 지정하십시오. (해당 코드는 제품마다 다릅니다.) – jarlh
MS SQL Server 2017 – MrEmper
@MrEmper. . . 코드에는 너무 많은 오류가있어서 너무 광범위하게 닫을 수 있습니다. ('SELECT'가없는'MAX() '를 사용하고, 숫자와 같은 문자열을 설정하고, 함수가 숫자를 반환 할 때 문자열을 반환하고, 더 많은 것은 의심의 여지가 없습니다). –