2016-03-03 69 views
0

这是我的表结构和数据目前其下如何以检索在这种情况下,基于执行价格数据

CREATE TABLE IF NOT EXISTS `nifty_banknifty` (
    `instrument` varchar(100) DEFAULT NULL, 
    `symbol` varchar(100) DEFAULT NULL, 
    `expiry_date` varchar(100) DEFAULT NULL, 
    `strike_pr` varchar(100) DEFAULT NULL, 
    `option_typ` varchar(15) DEFAULT NULL, 
    `open` decimal(15,2) DEFAULT NULL, 
    `high` decimal(15,2) DEFAULT NULL, 
    `low` decimal(15,2) DEFAULT NULL, 
    `close` decimal(15,2) DEFAULT NULL, 
    `settle_pr` decimal(15,2) DEFAULT NULL, 
    `contracts` varchar(70) DEFAULT NULL, 
    `open_int` varchar(70) DEFAULT NULL, 
    `change_oi` varchar(70) DEFAULT NULL, 
    `date_time` date DEFAULT NULL 
); 

INSERT INTO `nifty_banknifty` (`instrument`, `symbol`, `expiry_date`, `strike_pr`, `option_typ`, `open`, `high`, `low`, `close`, `settle_pr`, `contracts`, `open_int`, `change_oi`, `date_time`) VALUES 
('OPTIDX', 'NIFTY', '31-Mar-2016', '6000', 'CE', 1060.55, 1226.50, 1053.25, 1212.75, 1212.75, '684', '601650', '-1650', '2016-03-01'), 
('OPTIDX', 'NIFTY', '31-Mar-2016', '7000', 'CE', 156.65, 298.90, 156.65, 289.70, 289.70, '50178', '2553975', '-163125', '2016-03-01'), 
('OPTIDX', 'NIFTY', '31-Mar-2016', '6000', 'PE', 3.35, 5.20, 2.30, 2.70, 2.70, '11216', '1196350', '-2700', '2016-03-01'), 
('OPTIDX', 'NIFTY', '31-Mar-2016', '7000', 'PE', 124.10, 131.75, 62.10, 66.85, 66.85, '269140', '6069025', '1134400', '2016-03-01'); 

现在有两个执行价格6000和7000分别对应CE和PE open_int值各行权价格

的Stike价格不知道之前(即6000,7000不早点知道)

你能告诉我,我怎么可以编写一个查询以检索每个Stikre价格分别为每行权价

例如CE和PE open_int值的输出必须

Strike_Price  CE    PE 

6000   601650    1196350 
7000   2553975   6069025 

这是我的SQL小提琴

http://sqlfiddle.com/#!9/5db5b2/1

回答

1

你可以通过你的回应使用CASE WHEN... END

SELECT strike_pr , 
MAX(CASE WHEN option_typ = 'CE' THEN open_int END) AS CE , 
MAX(CASE WHEN option_typ = 'PE' THEN open_int END) AS PE 
FROM nifty_banknifty GROUP BY strike_pr; 

SQLFiddle

+0

非常感谢... – Pawan