2017-03-15 58 views
-1

我有要求在哪裏顯示一列作爲Carryover/new。在SQL select中添加一個自定義邏輯

邏輯如下。

如果顏色存在於調色板中,那麼將列'開發類型'標記爲新的其他結轉。 我試圖使用假設的表結構和simillar查詢來放置業務場景。

帕爾表

ID PalName  year 
1 Pal 1 2017 
2 Pal 2 2016 
3 pal 3 2017 
4 pal 4 2016 
5 pal 5 2017 

色表

ID Color name requestedpalette 
1 Red   pal 1, pal 5, 
2 Green  na, 
3 Black  na,pal 1,pal 3 

季節表

ID Color ID Palette ID Season name 
1 1     3 Summer 
2 2     4 Winter 

查詢

WITH masterdata AS 
    (SELECT season name, 
      color name, 
      season.is AS SeasonID, 
      color.id AS ColorID 
    FROM season 
    INNER JOIN color ON color.id=season.colorid 
    INNER JOIN palette ON palette.id=season.paletteid 
    WHERE palette.year=2017) 
SELECT colorname, 
     CASE 
      WHEN EXISTS 
        (SELECT 1 
        FROM masterdata 
        WHERE ',' || color.requestedpalette LIKE '%,' || masterdata.PalName || ',%') THEN 'New' 
      ELSE 'Carryover' 
     END DevelopmentType 
FROM color 

有沒有更好的方式來獲取上述不使用WITH? 如何設置基於在SQL查詢設置整個結果列的值

+0

未來,請格式化您的問題,就像我一樣。這使得它非常可讀。 –

回答

0

嘗試:

SELECT color, 
    nvl((SELECT distinct 'New' 
    FROM pal 
    WHERE regexp_like(color.requestedpalette, 
     '^([^,]*, *)*' || PalName || '(,.*)*$') 
    AND year = 2017 
    ), 'Carryover') DevelopmentType 
FROM color 

您不必PalName在您和條款,所以我不覺得有什麼你會按原樣工作。由於您只是將請求的面板與PalName進行比較,因此我沒有通過ID參加所有3個表格。如果您只需要有一個季節的調色板,請將該錶帶入子查詢列。

真的,清理的DataEntry錯誤後,你可以只移動masterdata查詢到主查詢作爲子查詢,並留下加入它

color.requestedpalette LIKE masterdata.PalName || ',%' 
or color.requestedpalette LIKE '%, ' || masterdata.PalName || ',%' 
or color.requestedpalette LIKE '%, ' || masterdata.PalName 
or color.requestedpalette = masterdata.PalName 

,它會根據你的原創設計作品。

SELECT distinct colorname, 
    (case when PalName is not null 
    then 'New' else 'Carryover' end) DevelopmentType 
FROM color 
LEFT JOIN (
    SELECT PalName 
    FROM season 
    INNER JOIN color ON color.id=season.colorid 
    INNER JOIN palette ON palette.id=season.paletteid 
    WHERE palette.year=2017 
) masterdata 
ON color.requestedpalette LIKE masterdata.PalName || ',%' 
OR color.requestedpalette LIKE '%, ' || masterdata.PalName || ',%' 
OR color.requestedpalette LIKE '%, ' || masterdata.PalName 
OR color.requestedpalette = masterdata.PalName 

編輯的16-MAR-2017佔PalName可能是封閉的或不PalName的子封閉在color.requestedpalette逗號。