2017-01-18 14 views
1

私の要件はitemIdです。値Postgresクエリで値を選択する必要があります。だから私はこのような何かをやっている:postgresで大量の代替案があります

select itemId, 
CASE 
-- Revenue 
    WHEN itemId in (339,28,29) 
    THEN 'Revenues' 
    -- Rev CHG calculated on the back-end 
--Expenditures 
    WHEN itemId = 102 
    THEN 'SG'||CHR(38)||'A' 
    -- SGA CHG calculated on the back-end 
    WHEN itemId = 4375 
    THEN 'SG'||CHR(38)||'A MARGIN' 
    WHEN itemId = 100 
    THEN 'R'||CHR(38)||'D EXPENSE' 
    -- RD CHG calculated on the back-end 
    WHEN itemId in (2021, 2114) 
    THEN 'CAPEX' 
    --CAPEX CHG calculated on the back-end 
    WHEN itemId = 34 
    THEN 'COGS' 
--Income 
    WHEN itemId = 379 
    THEN 'Net Income' 
    WHEN itemId = 7 
    THEN 'Earnings from Cont. Ops' 
    WHEN itemId = 83 
    THEN 'Minority Interest' 
    WHEN itemId = 280 
    THEN 'Preferred Stock Dividend' 
    -- NI CHG calculated on the back-end 
    WHEN itemId = 400 
    THEN 'EBIT' 
    WHEN itemId = 4197 
    THEN 'EBIT CHG 1 YR' 
    WHEN itemId = 4210 
    THEN 'EBIT CHG 2 YR' 
    WHEN itemId = 4223 
    THEN 'EBIT CHG 3 YR' 
    WHEN itemId = 4236 
    THEN 'EBIT CHG 5 YR' 
    WHEN itemId = 4249 
    THEN 'EBIT CHG 7 YR' 
    WHEN itemId = 4262 
    THEN 'EBIT CHG 10 YR' 
    WHEN itemId = 4051 
    THEN 'EBITDA' 
    WHEN itemId = 4196 
    THEN 'EBITDA CHG 1 YR' 
    WHEN itemId = 4209 
    THEN 'EBITDA CHG 2 YR' 
    WHEN itemId = 4222 
    THEN 'EBITDA CHG 3 YR' 
    WHEN itemId = 4235 
    THEN 'EBITDA CHG 5 YR' 
    WHEN itemId = 4248 
    THEN 'EBITDA CHG 7 YR' 
    WHEN itemId = 4261 
    THEN 'EBITDA CHG 10 YR' 
    WHEN itemId = 4047 
    THEN 'EBITDA MARGIN' 
    WHEN itemId = 3064 
    THEN 'EPS-BASIC' 
    --EPS-BASIC CHG calculated on the back-end 
    WHEN itemId = 142 
    THEN 'EPS-DIL' 
    --EPS-DIL CHG calculated on the back-end 
    WHEN itemId = 10 
    THEN 'GROSS PROFIT' 
    WHEN itemId = 4195 
    THEN 'GP CHG 1 YR' 
    WHEN itemId = 4208 
    THEN 'GP CHG 2 YR' 
    WHEN itemId = 4221 
    THEN 'GP CHG 3 YR' 
    WHEN itemId = 4234 
    THEN 'GP CHG 5 YR' 
    WHEN itemId = 4247 
    THEN 'GP CHG 7 YR' 
    WHEN itemId = 4260 
    THEN 'GP CHG 10 YR' 
    WHEN itemId = 4074 
    THEN 'GP MARGIN' 
    --GP MARGIN CHG calculated on the back-end 
    WHEN itemId in (21,5,356,22) 
    THEN 'OP PROFIT' 
    WHEN itemId = 373 
    THEN 'Total Operating Exp' 
    --OP PROFIT CHG calculated on the back-end 
--Cash Flow 
    WHEN itemId = 2207 
    THEN 'Cash Flow' 
    --CF CHG calculated on the back-end 
    WHEN itemId = 4423 
    THEN 'UNLEVERED FREE CASH FLOW' 
    WHEN itemId = 4430 
    THEN 'UCF CHG 1 YR' 
    WHEN itemId = 4431 
    THEN 'UCF CHG 2 YR' 
    WHEN itemId = 4432 
    THEN 'UCF CHG 3 YR' 
    WHEN itemId = 4433 
    THEN 'UCF CHG 5 YR' 
    WHEN itemId = 4434 
    THEN 'UCF CHG 7 YR' 
    WHEN itemId = 4435 
    THEN 'UCF CHG 10 YR' 
    WHEN itemId = 2006 
    THEN 'CASH OPS' 
    WHEN itemId = 2081 
    THEN 'Net Cash From Discont. Ops' 
    --Cash Ops CHG calculated on the back-end 
--Return 
    WHEN itemId = 4178 
    THEN 'ROA' 
    WHEN itemId = 4363 
    THEN 'ROC' 
    WHEN itemId = 4128 
    THEN 'ROE' 
--Working Capital 
    WHEN itemId = 4030 
    THEN 'CURRENT RATIO' 
    WHEN itemId = 4121 
    THEN 'QUICK RATIO' 
    WHEN itemId = 4177 
    THEN 'ASSET TURNOVER' 
    WHEN itemId = 4082 
    THEN 'INVENTORY TURNOVER' 
    END itemname in 
    from item i 
    join itemcode ic on i.itemcode = ic.itemcode 
    WHERE ic.dataItemId IN (.................); 

私は他の方法でそれを行うことはできますか?私はそれを改善することはできますか? WHEN-THENを削除するにはどうすればよいですか?

+7

ルックアップテーブルを作成し、そのルックアップテーブルに結合します –

+0

値は固定one.Any以外の方法で変更されます。ルックアップテーブルを作成する代わりに。 – madhu

+3

特に値が変更されている場合は、マッピングテーブルまたはルックアップテーブルが必要です。 –

答えて

0

アイテムIDからアイテム名へのマッピングを含むテーブルを作成し、これに参加してください。

SELECT i.itemId, n.Name 
FROM Item i 
JOIN ItemNames n ON n.ItemId = i.ItemId; 

...または、アイテムテーブルに名前列を追加するだけです。それはさらに良いかもしれません。私はこの問題を推測してい

1

は例終わりinです:

SELECT . . . 
     END itemname in 
--------------------^ 
from item i 

あなたの特定case式は結構です。 Postgresは簡単に解析します。すべての最も合理的である - -

with lookup as (
    values (339, 'Revenue'), 
      ( 28, 'Revenue'), 
      . . . 
    ) 
select 
from . . . left join 
    lookup l 
    on l.itemId = ?.itemId -- put the table name in for itemId 

または名前をitem表に列を追加します。あなたがしたい場合

は、あなたはこのようなものを使用して検索を行うことができます。それは本当に所属している場所です。

関連する問題