2014-09-24 4 views
0

У меня есть две таблицы dbo.tbRank и dbo.tbStaffхранимая процедура

  • В dbo.Rank У меня есть столбцы RankID и RankName
  • В dbo.Staff У меня есть столбцы StaffID, StaffSNo, StaffRankID, StaffName, StaffGender

Как получить RankID в tbStaff, как RankName как в tbRank?

Любая помощь очень ценится. Спасибо.

Вот моя хранимая процедура для tbStaff:

ALTER PROCEDURE [dbo].[selectStaff] 
    @sno as varchar(10) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    -- Insert statements for procedure here 
    if @sno = '' 
     begin 
      select 
       StaffID, StaffSNo as 'Staff Service No.', StaffRankID, 
       StaffName as 'Name', 
       case StaffGender 
        when 'f' then 'female' when 'm' then 'male' 
       end as 'Gender' 
      from tbStaff 
     end 
    else 
    begin 
     select 
     StaffID, StaffSNo, StaffRankID, StaffName, StaffGender 
     from tbStaff 
     where StaffSNo = @sno 
    end 
END 
+0

Присоединитесь к таблице tbrank и tbstaff по rankid и staffrankid из tbrank и tbstaff, а затем вы можете получить рейтинг из tbrank –

ответ

0

использовать левое соединение или внутреннее соединение в соответствии с вашими потребностями.

select 
       a.StaffID, a.StaffSNo as 'Staff Service No.', a.StaffRankID, 
       a.StaffName as 'Name', 
       case a.StaffGender 
        when 'f' then 'female' when 'm' then 'male' 
       end as 'Gender' , b.RankName 
      from tbStaff a 
left outer join Rank b on b.RankID = a.StaffRankID 
0

попытка ниже запроса

ALTER PROCEDURE [dbo].[selectStaff] 
    @sno AS VARCHAR(10) 
AS 
BEGIN 
IF LTRIM(RTRIM(@sno)) = '' 
    BEGIN 
     SELECT 
      tST.StaffID, 
      tST.StaffSNo AS 'Staff Service No.', 
      tST.StaffRankID, 
      tRK.RankName, 
      tST.StaffName AS 'Name', 
      CASE tST.StaffGender 
       WHEN 'f' THEN 'female' WHEN 'm' THEN 'male' 
      END AS Gender 
     FROM tbStaff tST 
     LEFT JOIN tbRank tRK ON tRK.RankID = tST.StaffRankID 
    END 
ELSE 
    BEGIN 
     SELECT 
      tST.StaffID, tST.StaffSNo, tST.StaffRankID, tRK.RankName, tST.StaffName, tST.StaffGender 
     FROM tbStaff tST 
     LEFT JOIN tbRank tRK ON tRK.RankID = tST.StaffRankID 
     WHERE tST.StaffSNo = @sno 
    END 
END 

Изменение стыки в соответствии с вашими потребностями ЛЕВАЯ или ВНУТРЕННИХ

0

Это, как я это сделал. И это сработало. Спасибо всем, кто помог. Ваша помощь была высоко оценена.

ALTER PROCEDURE [DBO] [selectStaff] @sno, как VARCHAR (10) КАК НАЧАТЬ SET NOCOUNT ON. если @sno = '' начинают выбрать tbStaff.StaffID, tbStaff.StaffSNo как 'службы №', tbStaff.StaffRankID, tbRank.RankName как ранг, tbStaff.StaffName как 'Имя', случай tbStaff.StaffGender , когда 'F', затем 'женский' когда 'м', затем 'мужской' конца как 'Пол'

 from tbStaff 
     inner join tbRank on tbRank.RankID = tbStaff.StaffRankID 
    end 
else 
    begin 
     select 
     tbStaff.StaffID, 
     tbStaff.StaffSNo as 'Service No.', 
     tbStaff.StaffRankID, 
     tbRank.RankName as Rank, 
     tbStaff.StaffName as Name, 
     tbStaff.StaffGender from tbStaff 
     inner join tbRank on tbRank.RankID = tbStaff.StaffRankID 
     where [email protected] 
    end 

END * * выделенного текст

Смежные вопросы