2015-01-22 5 views
0

Я следующие данные в SQLписать, если условие, когда изложение дела в процедуре SQL

Table with data

Я хочу написать запрос таким образом, что у меня есть данные Джона Смита с средней начальной M , и когда выбранное значение поля лицензионного сектора не равно не-фронту, оно должно показать john smith M со значением лицензионного сектора, не имеющим линии фронта, двери, безопасности, частного расследования. Только когда роль atrribute имеет значение NULL, роль содержит строку Non front или front, на которой будут отображаться данные, которые имеют роль по выбранному значению.

Поскольку я передаю значение лицензионному сектору с первого взгляда, используя раскрывающийся список, а мое раскрывающееся меню не содержит строки, не относящиеся к фронту. Это только в базе данных , а роль - это еще одно раскрывающееся меню, которое имеет значение, отличное от линии фронта и линии фронта.

Так что я хочу из положить следующим способом

Если стоимость лицензии сектор выбирается из выпадающего списка является безопасность двери и значение роли равно нулю, то из положить для John Smith M

1102551085816250 Smith  John M 12/15/1987 Non-Frontline Non-Frontline     
1102941363382950 Smith  John M 12/15/1987 Door Security Frontline     

, если значение лицензии сектора выбирается из выпадающего списка является безопасность двери и значение роли, выбранная из выпадающего списка является линией фронта:

1102941363382950 Smith John M 12/15/1987 Door Security Frontline 

если стоимость лицензии сектора выбирается из выпадающего списка является ду г безопасность и значение роли, выбранная из выпадающего списка является Non-центрфорвард, то он не должен показывать какие-либо данные, поскольку не существует такой комбинации

я написал процедуру следующим способом

SELECT Licence_Number, 
     Family_Name, 
     First_Name, 
     Middle_Initial, 
     Date_of_birth, 
     Licence_sector, 
     [Role], 
     [Expiry_date], 
     [Status], 
     Status_as_of_date, 
     Status_explanation, 
     Additional_condition 
FROM Public_Register 
WHERE Family_Name = @Familyname 
     AND [Expiry_date] > Getdate() 
     AND (CASE 
       WHEN @Forname IS NULL THEN 'A' 
       ELSE First_Name 
      END LIKE Isnull('%' + @Forname + '%', 'A') 
      AND CASE 
        WHEN @MiddleInit IS NULL THEN 'A' 
        ELSE Middle_Initial 
       END = Isnull(@MiddleInit, 'A') 
      AND CASE 
        WHEN @DOB IS NULL THEN '' 
        ELSE Date_of_birth 
       END = Isnull(@DOB, '') 
      AND (CASE 
        WHEN @Role IS NULL THEN '' 
        ELSE [Role] 
        END = Isnull(@Role, '')) 
       OR [Role] = 'Non-Frontline') 
     AND CASE 
      WHEN @Sector IS NULL THEN '' 
      ELSE Licence_sector 
      END = Isnull(@Sector, '') 

Пожалуйста, помогите мне, как я могу изменить чтобы получить желаемый результат.

+0

так, если роль равна нулю, то показать все записи для Джона либо линию фронта или отсутствие линии фронта? –

+1

Используете ли вы MySQL или SQL Server? – trailmax

+0

Я думаю, что в mysql нет хранимой процедуры, не так ли? –

ответ

0

Попробуйте изменить эту строку:

AND (CASE WHEN @Role IS NULL THEN TRUE ELSE ([Role] = @Role) END) 
Смежные вопросы