1

次の値を持つテーブルがあります。

gl_accountcode  gl_reference    gl_subledger_code   MOE
40000000003000  00001064        TOTDOO01    
40000000003102  00001064        TOTDOO01            60
40002073999807  00001064        TOTDOO01    
40000000003000  00025928        WATSEC01    
40000000003102  00025928        WATSEC01            60
40305558609795  00025928        WATSEC01            60

substring(B.gl_accountcode,9,2) = '60' を条件 1 として、また (B.gl_accountcode) = '40000000003102' および substring(B.gl_accountcode,9,2) = の場合に、MOE 列に 60 を入力したい条件 2 と同じ GL 参照の場合は「60」。

この例では、「00001064」と「00025928」の 2 つの GL 参照を取り上げました。

substring(B.gl_accountcode,9,2) が '60' ではなく、同じ GL リファレンスの (B.gl_accountcode) = '40000000003102' である場合、MOE 列に '60' を入力したくありません。 .

select 
RTRIM(LTRIM(B.gl_accountcode)) as 'GL AccountCode',
RTRIM(LTRIM(B.gl_reference)) as 'GL Reference',
RTRIM(LTRIM(B.gl_subledger_code)) as 'GL Subledger Code',
CASE 
WHEN substring(B.gl_accountcode,9,2) = '60' OR (LTRIM(RTRIM(B.gl_accountcode))) =       '40000000003102' THEN '60'
ELSE ''
END MOE 
from dbo.pronto_NZD_GLTransUnion B
where B.gl_reference in ( '00025928', '00001064')
order by B.gl_reference, B.gl_accountcode

テーブルに自分で参加する必要があると思いますが、頭がわかりません。あなたの助けに感謝。

4

1 に答える 1

0

... 条件 1 として substring(B.gl_accountcode,9,2) = '60' の場合、および (B.gl_accountcode) = '40000000003102' および substring(B.gl_accountcode,9,2) = '60' の場合は 60条件 2 と同じ GL 参照。

substring(B.gl_accountcode,9,2) が '60' ではなく、(B.gl_accountcode) = '40000000003102' の場合、MOE 列に '60' を入力したくありません。

もっと簡単に言うと...

60 when 

substring(x) = '60'
OR
(B.gl_accountcode = 'y' and substring(x) = '60')

(...and not when (B.gl_accountcode = 'y' and substring(x) <> '60')

基本的には

substring(x) = '60'

したがって、あなたの最終的な声明は次のとおりです。

select 
RTRIM(LTRIM(B.gl_accountcode)) as 'GL AccountCode',
RTRIM(LTRIM(B.gl_reference)) as 'GL Reference',
RTRIM(LTRIM(B.gl_subledger_code)) as 'GL Subledger Code',
CASE 
WHEN substring(B.gl_accountcode,9,2) = '60' 
THEN '60'
ELSE ''
END MOE 
from pronto_NZD_GLTransUnion B
where B.gl_reference in ( '00025928', '00001064')
order by B.gl_reference, B.gl_accountcode

編集: 私はあなたの望む結果を待っていますが、これはあなたが探しているものでしょうか?

select 
RTRIM(LTRIM(B.gl_accountcode)) as 'GL AccountCode',
RTRIM(LTRIM(B.gl_reference)) as 'GL Reference',
RTRIM(LTRIM(B.gl_subledger_code)) as 'GL Subledger Code',
CASE 
WHEN substring(B.gl_accountcode,9,2) = '60' THEN '60'
WHEN gl_accountcode = '40000000003102' AND EXISTS (SELECT 1 FROM pronto_NZD_GLTransUnion a WHERE substring(a.gl_accountcode,9,2) = '60' AND a.gl_reference = B.gl_reference) THEN '60'
ELSE ''
END MOE 
from pronto_NZD_GLTransUnion B
where B.gl_reference in ( '00025928', '00001064')
order by B.gl_reference, B.gl_accountcode
  • sqlfiddleでライブで動作するのを見てください
于 2013-09-05T10:25:16.197 に答える