2013-08-29 1 views
2

Я хочу сделать запрос. Я использую Microsoft SQL.с использованием оператора CASE и WHERE и счетчика SQL

  • Если произведение равно быстро ...
    • и tree_level равно 0,1,2,3,4,5, то подсчитать количество 0,1,2,3,4, 5. Например, если имеется 30 предметов, которые содержат «0,1,2,3,4,5». Затем умножьте 30 * 2.
    • и tree_level равен -1, то подсчитать число -1 и умножить на 2
  • Если произведение равно MOBIL и tree_level будет рассчитывать равна 0,1,2,3,4,5 номер и умножить на 3
  • Если произведение равно ЛИЦО ...
    • и tree_level равно 0,1,2,3,4,5, то подсчитать количество 0,1,2,3,4 , 5 и умножить на 3
    • и tree_level равно -1, затем подсчитать количество -1 и умножить на 2

Как можно использовать здесь, где и где имеются счетчики? Я не могу сделать это.

select 
    DS.PersTel , 
    DW.AD , 
    DW.SOYAD , 
    DS.RefPhoner , 
    DS.Product , 
    DS.Tree_level 

WHERE DS.Product like '%FACE%' (
CASE 
WHEN DS.Tree_level IN (0,1,2,3,4,5) THEN count(DS.Tree_level) * 3 
WHEN DS.Tree_level IN (-1) THEN count(DS.Tree_level) * 2 
END 

WHERE DS.Product like '%MOBIL%' (
CASE DS.Tree_level 
WHEN DS.Tree_level IN (0,1,2,3,4,5) THEN count(DS.Tree_level) * 3 
END ) 

WHERE DS.Product like '%FAST%' (
CASE DS.Tree_level 
WHEN DS.Tree_level IN (0,1,2,3,4,5) THEN count(DS.Tree_level) * 2 
WHEN DS.Tree_level IN (-1) THEN count(DS.Tree_level) * 2 
END ) 


    from dw_prod.FRTN.DIG_SEFER AS DS 
    inner join dw_prod.dbo.DW_MUST AS DW 
    ON DW.CEP_TEL = DS.PersTel 

обновленный корпус часть

 select 
     DS.PersTel , 
      DW.AD , 
      DW.SOYAD , 
      DS.RefPhoner , 
      DS.Product , 
      DS.Tree_level 
    CASE 
    WHEN DS.Tree_level IN (0,1,2,3,4,5)AND DS.Product LIKE '%FACE%' THEN count(DS.Tree_level) * 3 
    WHEN DS.Tree_level IN (-1) THEN count(DS.Tree_level) * 2 
    END AS Answer1 

    CASE DS.Tree_level 
    WHEN DS.Tree_level IN (0,1,2,3,4,5) AND DS.Product LIKE '%MOBIL%' THEN count(DS.Tree_level) * 3 
    END AS Answer2 

    CASE DS.Tree_level 
    WHEN DS.Tree_level IN (0,1,2,3,4,5) AND DS.Product LIKE '%FAST%' THEN count(DS.Tree_level) * 2 
    WHEN DS.Tree_level IN (-1) THEN count(DS.Tree_level) * 2 
    END AS Answer3 

    from d.FR AS Ds 
      inner join d.dbo.DW AS Dw 
      ON DW.CEP_TEL = DS.PersTel 
+0

Просьба представить пример вывода для того, что вы хотите достичь. –

+0

В чем проблема? –

+0

Я не могу использовать счетчик, где, case algorthm вместе –

ответ

1

Это должно вам начать:

select 
    product, 
    tree_level, 
    count(1) over (partition by product,tree_level_category) 
     * case when product like '%FACE%' 
       then case tree_level_category 
         when '0-5' then 3 
         when '-1' then 2 
        end 
       when product like '%MOBIL%' 
       then case tree_level_category 
         when '0-5' then 3 
        end 
       when product like '%FAST%' 
       then case tree_level_category 
        when '0-5' then 2 
        when '-1' then 2 
       end 
     end 
from (
    select 
     product, 
     tree_level, 
     case when tree_level in (0,1,2,3,4,5) 
      then '0-5' 
      when tree_level = '-1' 
      then '-1' 
      else null 
     end tree_level_category 
    from 
     product 
) as t 

SQLFiddle here

+0

как можно использовать его с join –

+0

Просто добавьте его в нижний запрос. – Joe

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