2017-01-16 2 views
0

я зр .. в этом я стараюсь, когда descitem значение имеет «-», то хочу, чтобы получить значение @Typeid то, что когда-нибудь в этом параметре я попробовать этотописание вместо «-»

перед тем изменить

ALTER PROCEDURE dbo.GetItem 
    @Typeid Smallint 
As 
    begin 
     select 0 Itemid, '-' descitem 
     union all 
     select ci.Itemid, ci.descitem descitem 
     from Item ci where [email protected] 
    END 
return 

, когда я исполняю это показывает результат, как этот

exec GetItem 38 

    Itemid descitem 
     0  - 

и если я попробовать с другой, как

exec GetItem 39 
Itemid descitem 
    0  - 
    83  issues 
    84  system 
    85  repair 

после изменения

ALTER PROCEDURE dbo.GetItem 
    @Typeid Smallint 
As 
begin 
    declare @descitem nvarchar(50) 
     select 0 Itemid, '-' descitem 
     union all 
     select ci.Itemid, ci.descitem descitem 
     from Item ci where [email protected] 
     if @descitem='-' 
    begin 
     select Typeid, descitem descitem from Type 
    end 
    END 
return 

, поэтому я хочу, когда я исполняю

exec GetItem 38 

затем хотите получить описание 38 вместо "-"

UPDATE

tables 

    **type table** 
typeid descitem  catg_id 
1  fruits  4 
2  suggestions 5 
3  reports  6 

**item table** 

itemid descitem catg_id typeid 
1  good  5   2 
2  bad   5   2 
3  average  5   2 
4  report1  6   3 
5  report2  6   3  

так как уже упоминалось, что нет 4 catg_id в таблице элементов так хочется есть фрукты в TypeID затем хотите отобразить также в результате , когда я исполняю GetItem 4

item descitem 
0  fruits 
+0

Пожалуйста, отредактируйте ваш вопрос, чтобы включить соответствующие таблицы DDL, некоторые образцы данных как DML и желаемые результаты. –

+0

@ ZoharPeled проверить обновление пожалуйста –

+0

@cooluser в конце, вы ищете 'catg_id' или' typeid'? ваш код использует @typeid, в то время как ваш описательный пример касается фильтрации по 'catg_id = 4'. –

ответ

0

Это не очень понятно если вы ищете элементы по категории id (как предложено из текста) или по типу if (как предложено из запроса).

Я пошел с категорией ид, как предложено в тексте:

ALTER PROCEDURE dbo.GetItem 
    @CategoryId Smallint 
As 
BEGIN 

    SELECT Itemid, descitem descitem 
    FROM Item 
    WHERE catg_id = @CategoryId 

    UNION ALL 

    SELECT 0, descitem 
    FROM type 
    WHERE catg_id = @CategoryId 
    AND NOT EXISTS 
    (
     SELECT 1 
     FROM Item 
     WHERE catg_id = @CategoryId 
    ) 

END 

где положение второго запроса заставит его возвращать только результаты, когда нет элементов с категории ид вы ищете.

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