Вставьте в использование Case Case - PullRequest
0 голосов
/ 17 марта 2019

Я пытаюсь вставить данные в таблицу, используя хранимую процедуру с одним параметром.Параметр ищет название клуба.Я хочу, чтобы SP нашел всех игроков, принадлежащих клубу, и вставил их в ClubNameTable.Проблема заключается в том, что когда я запускаю SP, он вставляет все данные из объединения в таблицу, а не только тогда, когда оператор case равен true.

CREATE PROCEDURE SSIS.usp_ClubNameTable 
    -- Add the parameters for the stored procedure here
    @NameOfClub nvarchar(200)
AS
BEGIN
    TRUNCATE TABLE SSIS.ClubNameTable;
    insert into ssis.ClubNameTable ([NameOfClub], [FirstName], [LastName])
        SELECT
            p.FirstName,
            COUNT(p.LastName) as 'Number of Last Names',                
            CASE
                WHEN @NameOfClub = 'Eagle Plate' THEN NameOfClub
                WHEN @NameOfClub = 'Atlanta United FC' THEN NameOfClub
                    ELSE 'Please choose either Eagle Plate or Atlanta United FC'
                end
    FROM [Location].Club as C
            JOIN [Location].ClubDetails as CD on c.ClubID = cd.ClubID
            JOIN [Player].Player as P on CD.PlayerID = P.PlayerID
            GROUP BY c.NameOfClub, p.FirstName, p.LastName
            ORDER BY p.LastName ASC
        declare 
        @RowCount int
            SET @RowCount = (SELECT COUNT(*) FROM Location.Club)
END
GO

1 Ответ

3 голосов
/ 17 марта 2019

Использование case statement для столбца не выполняет никакой фильтрации записей, оно просто применяет условия к значению, которое должно быть присвоено столбцу. Чтобы отфильтровать записи, вам нужно использовать предложение where с желаемыми условиями:

 CREATE PROCEDURE SSIS.usp_ClubNameTable 
    -- Add the parameters for the stored procedure here
    @NameOfClub nvarchar(200)
AS
BEGIN
    TRUNCATE TABLE SSIS.ClubNameTable;
    if(@NameOfClub = 'Eagle Plate' or @NameOfClub = 'Atlanta United FC')
    begin
    insert into ssis.ClubNameTable ([NameOfClub], [FirstName], [LastName])
        SELECT
            p.FirstName,
            COUNT(p.LastName) as 'Number of Last Names',                
            NameOfClub
    FROM [Location].Club as C
            JOIN [Location].ClubDetails as CD on c.ClubID = cd.ClubID
            JOIN [Player].Player as P on CD.PlayerID = P.PlayerID
            Where C.NameOfClub = @NameOfClub
            GROUP BY c.NameOfClub, p.FirstName, p.LastName
            ORDER BY p.LastName ASC
        declare 
        @RowCount int
            SET @RowCount = (SELECT COUNT(*) FROM Location.Club)
    end

    else
    begin
    select 'Please choose either Eagle Plate or Atlanta United FC'
    end
END
GO
...