Я хочу выбрать ту же таблицу в том же столбце, чтобы отделить Desc_Main и Desc_sup с помощью cdValuse - PullRequest
0 голосов
/ 26 ноября 2018

Я хочу отделить Desc_Main и Desc_Sup от cdValue

  1. 100000 являются основными и имеют значение sup '101000', '102000' из cdValue
  2. 200000 являются основными и имеютЗначение sup '201000', '202000' из cdValue

This is the result pic

Я хочу показать в этой таблице

I want to show this result pic

Мой сценарий

 SELECT 
          cdValue
        , Desc_sup  =   CASE Left(cdValue,3)
                        WHEN '100' THEN cdDesc_th
                        WHEN '200' THEN cdDesc_th
                        ELSE cdDesc_th END 
        ,
         Desc_Main  =   CASE Left(cdValue,3)
                        WHEN '101' THEN cdDesc_th 
                        WHEN '102' THEN cdDesc_th
                        WHEN '103' THEN cdDesc_th
                        WHEN '104' THEN cdDesc_th
                        WHEN '105' THEN cdDesc_th
                        WHEN '106' THEN cdDesc_th
                        WHEN '201' THEN cdDesc_th
                        WHEN '202' THEN cdDesc_th
                        ELSE cdDesc_th END
        FROM SellingAgent..tb_LookupCode (NOLOCK) 
        WHERE cdType='Cat_FAQ'

Пожалуйста, помогите мне использовать Case-когда Большое спасибо

1 Ответ

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

Если ваша версия СУБД 2012+, то может использовать first_value() функцию

  with tb_LookupCode(cdValue, Desc_sup, Desc_Main) as
          (
           select 100000, 'FAQ','FAQ' union all
           select 101000, 'Philip Fund','Philip Fund' union all   
           select 102000, 'LTF&RMF','LTF&RMF' union all
           select 200000, 'Article','Article' union all
           select 201000, 'Financial Article','Financial Article'  
          )
   select first_value(cdValue) over 
          (partition by substring(cast(cdValue as varchar(25)),1,1) 
           order by cdValue)
          as cdValue,
          first_value(Desc_sup) over 
          (partition by substring(cast(cdValue as varchar(25)),1,1) 
           order by substring(cast (cdValue as varchar(25)),1,1))
          as Desc_sup,
          Desc_Main
     from tb_LookupCode l;

cdValue Desc_sup    Desc_Main
------- -------- ------------------ 
100000   FAQ          FAQ
100000   FAQ       Philip Fund
100000   FAQ        LTF&RMF
200000  Article     Article
200000  Article   Financial Article

Rextester Demo

...