2015-01-13 2 views
-1

Я хотел бы создать представление с двумя новыми столбцами как SC и NC.Могу ли я использовать ключевое слово «AS» в Case Case

Я хочу написать логику, которая сравнивает страну1 и страну-поставщика, если она совпадает, то я хочу сравнить MOQ. Если совпадений, то я хочу, чтобы стоимость соответствующего MOQ хранилась в представлении как NC, SC

Является ли этот оценка хорошим для этого.

Существует не более 3 стран, 5 моков, 3 страны-поставщика, 3 поставщика MOQ.

create view viewCountry as 
select dbo.SCN_Vw_ProjectDetailsReport_Revision.*,'' as SC, '' as NC, 
case 
when 
country1=supplier_country1 
then 
(
case 
when 
lot_size=negotiated_lot_size then lot_size1_1 as SC, Negotiated_cost as NC 
when 
moq2=negotiated_lot_size then lot_size2_1 as SC, Negotiated_cost as NC 
when 
moq3=negotiated_lot_size then lot_size5_1 as SC, Negotiated_cost as NC 
when 
moq4=negotiated_lot_size then lot_size10_1 as SC, Negotiated_cost as NC 
when 
moq5=negotiated_lot_size then lot_size25_1 as SC, Negotiated_cost as NC 
else NULL as SC, NULL as NC 
) end as SC,NC 
when 
country1=supplier_country2 
then 
(
case 
when 
lot_size=negotiated_lot_size2 then lot_size1_1 as SC, Negotiated_cost2 as NC 
when 
moq2=negotiated_lot_size2 then lot_size2_1 as SC, Negotiated_cost2 as NC 
when 
moq3=negotiated_lot_size2 then lot_size5_1 as SC, Negotiated_cost2 as NC 
when 
moq4=negotiated_lot_size2 then lot_size10_1 as SC, Negotiated_cost2 as NC 
when 
moq5=negotiated_lot_size2 then lot_size25_1 as SC, Negotiated_cost2 as NC 
else NULL as SC, NULL as NC 
) 
when 
country3=supplier_country3 
then 
(
case 
when 
lot_size=negotiated_lot_size3 then lot_size1_1 as SC, Negotiated_cost3 as NC 
when 
moq2=negotiated_lot_size3 then lot_size2_1 as SC, Negotiated_cost3 as NC 
when 
moq3=negotiated_lot_size3 then lot_size5_1 as SC, Negotiated_cost3 as NC 
when 
moq4=negotiated_lot_size3 then lot_size10_1 as SC, Negotiated_cost3 as NC 
when 
moq5=negotiated_lot_size3 then lot_size25_1 as SC, Negotiated_cost3 as NC 
else NULL as SC, NULL as NC 
) 
from SCN_Vw_ProjectDetailsReport_Revision 

ответ

0

и не может сделать это, и можно только установить имя столбца в конце оператора «End» для случая, ниже мой лучший образец, который может создан через предоставленную информацию.

u не могу этого сделать, вы можете установить только имя столбца в конце выражения «Конец» для CASE, ниже мой лучший образец, который может быть создан через предоставленную вами информацию.

create view viewCountry as 
select dbo.SCN_Vw_ProjectDetailsReport_Revision.*,'' as SC, '' as NC, 
    from SCN_Vw_ProjectDetailsReport_Revision 
    UNION ALL 

select dbo.SCN_Vw_ProjectDetailsReport_Revision.*, 
case 
when 
country1=supplier_country1 
then 
(
case 
when 
lot_size=negotiated_lot_size then lot_size1_1 
when 
moq2=negotiated_lot_size then lot_size2_1 
when 
moq3=negotiated_lot_size then lot_size5_1 
when 
moq4=negotiated_lot_size then lot_size10_1 
when 
moq5=negotiated_lot_size then lot_size25_1 
else NULL END 
) END 'SC', 
case 
when 
country1=supplier_country1 
then 
(
case 
when 
lot_size=negotiated_lot_size then Negotiated_cost 
when 
moq2=negotiated_lot_size then Negotiated_cost 
when 
moq3=negotiated_lot_size then Negotiated_cost 
when 
moq4=negotiated_lot_size then Negotiated_cost 
when 
moq5=negotiated_lot_size then Negotiated_cost 
else NULL END 
) END 'NC' 


    from SCN_Vw_ProjectDetailsReport_Revision 
    UNION ALL 

     select dbo.SCN_Vw_ProjectDetailsReport_Revision.*, 
    ,  
CASE 
when 
country1=supplier_country2 
then 
(
case 
when 
lot_size=negotiated_lot_size2 then lot_size1_1 
when 
moq2=negotiated_lot_size2 then lot_size2_1 
when 
moq3=negotiated_lot_size2 then lot_size5_1 
when 
moq4=negotiated_lot_size2 then lot_size10_1 
when 
moq5=negotiated_lot_size2 then lot_size25_1 
else NULL END 
) END 'SC' 
, 

CASE 
when 
country1=supplier_country2 
then 
(
case 
when 
lot_size=negotiated_lot_size2 then Negotiated_cost2 
when 
moq2=negotiated_lot_size2 then Negotiated_cost2 
when 
moq3=negotiated_lot_size2 then Negotiated_cost2 
when 
moq4=negotiated_lot_size2 then Negotiated_cost2 
when 
moq5=negotiated_lot_size2 then Negotiated_cost2 
else NULL END 
) END 'NC' 


    from SCN_Vw_ProjectDetailsReport_Revision 
    UNION ALL 

     select dbo.SCN_Vw_ProjectDetailsReport_Revision.*, 
    CASE 
when 
country3=supplier_country3 
then 
(
case 
when 
lot_size=negotiated_lot_size3 then lot_size1_1 
when 
moq2=negotiated_lot_size3 then lot_size2_1 
when 
moq3=negotiated_lot_size3 then lot_size5_1 
when 
moq4=negotiated_lot_size3 then lot_size10_1 
when 
moq5=negotiated_lot_size3 then lot_size25_1 
else NULL END 
) END 'SC' 
, 

CASE 
when 
country3=supplier_country3 
then 
(
case 
when 
lot_size=negotiated_lot_size3 then Negotiated_cost3 
when 
moq2=negotiated_lot_size3 then Negotiated_cost3 
when 
moq3=negotiated_lot_size3 then Negotiated_cost3 
when 
moq4=negotiated_lot_size3 then Negotiated_cost3 
when 
moq5=negotiated_lot_size3 then Negotiated_cost3 
else NULL END 
) END 'NC' 


    from SCN_Vw_ProjectDetailsReport_Revision 
+0

Ошибка: имена столбцов в каждом представлении или функции должны быть уникальными. Имя столбца «SC» в представлении или функция «viewCountry» указывается более одного раза. – Seeker

+0

упс, код обновлен, забыли, это мнение. –

+0

Я получаю несколько повторяющихся записей для каждой строки. Я получаю 3 записи для одного. Я перешел из Союза ALL в Союз – Seeker

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