Использование оператора CASE с псевдонимом для создания другого столбца - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь создать новый столбец под названием "Размер" на основе моего длинного оператора CASE.Я использовал «Количество элементов» в качестве псевдонима.

Не могли бы вы помочь мне, пожалуйста?

Мой оператор CASE:

  CASE WHEN (dbo.ItemSpecs.ConfigProptext LIKE 'Run%') THEN (CEILING(dbo.WorkOrderDetails.QtyOrdered / 4)) WHEN dbo.ItemSpecs.ConfigProptext LIKE 'Pure' THEN (CEILING(dbo.WorkOrderDetails.QtyOrdered / 4)) 
                     WHEN dbo.ItemSpecs.ConfigProptext LIKE 'Team%' THEN (CEILING(dbo.WorkOrderDetails.QtyOrdered / 4)) ELSE dbo.WorkOrderDetails.QtyOrdered END AS NumberofItems

и новый столбецЯ пытаюсь добавить это, когда количество элементов <5, а затем отобразить «автомобиль» или «Ван».Этот столбец должен иметь псевдоним "SIZE" </p>

Я застрял на этом.

1 Ответ

0 голосов
/ 12 ноября 2018

Вам нужно вложить это в другой CASE.

CASE WHEN
        CASE 
            WHEN dbo.ItemSpecs.ConfigProptext LIKE 'Run%'
                THEN (CEILING(dbo.WorkOrderDetails.QtyOrdered / 4)) 
            WHEN dbo.ItemSpecs.ConfigProptext LIKE 'Pure' 
                THEN (CEILING(dbo.WorkOrderDetails.QtyOrdered / 4)) 
            WHEN dbo.ItemSpecs.ConfigProptext LIKE 'Team%' 
                THEN (CEILING(dbo.WorkOrderDetails.QtyOrdered / 4)) 
            ELSE dbo.WorkOrderDetails.QtyOrdered 
        END 
      < 5 
      THEN 'Car'
      ELSE 'VAN'
END as NewCol

Или другой способ - использовать CTE.

;with cte as(
select *,
        CASE 
            WHEN dbo.ItemSpecs.ConfigProptext LIKE 'Run%'
                THEN (CEILING(dbo.WorkOrderDetails.QtyOrdered / 4)) 
            WHEN dbo.ItemSpecs.ConfigProptext LIKE 'Pure' 
                THEN (CEILING(dbo.WorkOrderDetails.QtyOrdered / 4)) 
            WHEN dbo.ItemSpecs.ConfigProptext LIKE 'Team%' 
                THEN (CEILING(dbo.WorkOrderDetails.QtyOrdered / 4)) 
            ELSE dbo.WorkOrderDetails.QtyOrdered 
        END as NumberofItems
from ItemSpecs)

select *,
    case when NumberofItems < 5 then 'car' else 'van' end as NewCol
from cte

Или в виде производной таблицы

select
   col1,
   col2,
   case when NumberofItems < 5 then 'car' else 'van' end
from
    (select *,
            CASE 
                WHEN dbo.ItemSpecs.ConfigProptext LIKE 'Run%'
                    THEN (CEILING(dbo.WorkOrderDetails.QtyOrdered / 4)) 
                WHEN dbo.ItemSpecs.ConfigProptext LIKE 'Pure' 
                    THEN (CEILING(dbo.WorkOrderDetails.QtyOrdered / 4)) 
                WHEN dbo.ItemSpecs.ConfigProptext LIKE 'Team%' 
                    THEN (CEILING(dbo.WorkOrderDetails.QtyOrdered / 4)) 
                ELSE dbo.WorkOrderDetails.QtyOrdered 
            END as NumberofItems
    from ItemSpecs) x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...