Проблема выражения случая в SQL - PullRequest
0 голосов
/ 23 ноября 2018

Я использую оператор IF и оператор case для этого.Когда я это делаю, я получаю сообщение об ошибке.

В основном, если тип безопасности = «Валюта в будущем», я хочу вывести его как «NetDetail», иначе «Подробно»

SQLутверждение выглядит так:

Ошибка выглядит следующим образом:

<e>Query: SELECT `Desk`, `VT_id`, `BloombergID`,`Id_Type`,`Position` ,`Price`, `positions_desk`.`Multiplier`,`CCY`,`business_date`,`APAC_E...

Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'CASE 
     WHEN (`APAC_Exposures_Map`.`Security_Type`) THEN 'NetDetail'
                        ' at line 3

Ответы [ 4 ]

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

Не могли бы вы проверить это?

SELECT `Desk`, `VT_id`, `BloombergID`,`Id_Type`,`Position` ,`Price`, `positions_desk`.`Multiplier`,`CCY`,`business_date`,`APAC_Exposures_Map`.`Equity_Index`,`APAC_Exposures_Map`.`Security_Type`,`APAC_Exposures_Map`.`Leverage`, CASE WHEN(Id_Type !='FWD' THEN COALESCE(`APAC_Exposures_Map`.`Expiry`, `CBBC_Static_Data`.`Expiration_date`), STR_TO_DATE(SUBSTRING(`VT_id`, 7, 6),'%y%m%d') ) ELSE GETDATE() AS `Expiration_date`, `CBBC_Static_Data`.`Strike`
FROM `risk_source`.`positions_desk`,
(CASE 
     WHEN (`APAC_Exposures_Map`.`Security_Type`) THEN 'NetDetail'
                         ELSE 'Detail' 
END) AS `Record_Type`
LEFT JOIN (`risk`.`APAC_Exposures_Map`) ON`positions_desk`.`BloombergID`=UPPER(`APAC_Exposures_Map`.`BBG_Ticker`)
LEFT JOIN (`risk_source`.`CBBC_Static_Data`) ON LEFT(`positions_desk`.`BloombergID`,5) =`CBBC_Static_Data`.`CBBC_Name`
WHERE business_date= ? AND (Id_Type='FUT') AND Desk NOT IN ('HKCOI')
0 голосов
/ 23 ноября 2018

Вам необходимо указать ваше состояние

SELECT `Desk`, `VT_id`, `BloombergID`,`Id_Type`,`Position` ,`Price`, `positions_desk`.`Multiplier`,`CCY`,`business_date`,`APAC_Exposures_Map`.`Equity_Index`,`APAC_Exposures_Map`.`Security_Type`,`APAC_Exposures_Map`.`Leverage`, IF(Id_Type !='FWD',COALESCE(`APAC_Exposures_Map`.`Expiry`, `CBBC_Static_Data`.`Expiration_date`), STR_TO_DATE(SUBSTRING(`VT_id`, 7, 6),'%y%m%d') ) AS `Expiration_date`, `CBBC_Static_Data`.`Strike`
,
CASE WHEN `APAC_Exposures_Map`.`Security_Type`='YOUR Condition' THEN 'NetDetail'
                         ELSE 'Detail' 
END AS `Record_Type` FROM `risk_source`.`positions_desk`
LEFT JOIN (`risk`.`APAC_Exposures_Map`) ON`positions_desk`.`BloombergID`=UPPER(`APAC_Exposures_Map`.`BBG_Ticker`)
LEFT JOIN (`risk_source`.`CBBC_Static_Data`) ON LEFT(`positions_desk`.`BloombergID`,5) =`CBBC_Static_Data`.`CBBC_Name`
WHERE business_date= ? AND (Id_Type='FUT') AND Desk NOT IN ('HKCOI')
0 голосов
/ 23 ноября 2018

вы пропустили случай, когда условию оператора case when APAC_Exposures_Map. Security_Type = // здесь нужно условное значение, и этот выбор будет перед именем таблицы

 SELECT `Desk`, `VT_id`, `BloombergID`,`Id_Type`,`Position` ,`Price`, 
`positions_desk`.`Multiplier`,`CCY`,`business_date`,
`APAC_Exposures_Map`.`Equity_Index`,`APAC_Exposures_Map`.`Security_Type`,
`APAC_Exposures_Map`.`Leverage`,
IF(Id_Type !='FWD',COALESCE(`APAC_Exposures_Map`.`Expiry`, `CBBC_Static_Data`.`Expiration_date`), 
STR_TO_DATE(SUBSTRING(`VT_id`, 7, 6),'%y%m%d') ) AS `Expiration_date`,
`CBBC_Static_Data`.`Strike`,
(CASE WHEN (`APAC_Exposures_Map`.`Security_Type`='need value') THEN 'NetDetail' ELSE 'Detail' 
END) AS `Record_Type`
    FROM `risk_source`.`positions_desk`    
    LEFT JOIN (`risk`.`APAC_Exposures_Map`) ON`positions_desk`.`BloombergID`=UPPER(`APAC_Exposures_Map`.`BBG_Ticker`)
    LEFT JOIN (`risk_source`.`CBBC_Static_Data`) ON LEFT(`positions_desk`.`BloombergID`,5) =`CBBC_Static_Data`.`CBBC_Name`
    WHERE business_date= ? AND (Id_Type='FUT') AND Desk NOT IN ('HKCOI')
0 голосов
/ 23 ноября 2018

Вы что-то забыли:

(CASE 
     WHEN (`APAC_Exposures_Map`.`Security_Type` =  'Currency Future') THEN 'NetDetail'
                         ELSE 'Detail' 
END) AS `Record_Type`

Условие должно быть:

`APAC_Exposures_Map`.`Security_Type` =  'Currency Future'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...