-1
我一直在MYSQL中讨论这个问题,因为没有Pivots或Cubes。 我一直在使用案例在审判,它的工作原理部分然而我似乎无法对其进行过滤,只有会员=是,尽管子查询工作,筛选出“否”名称值列表对列
CREATE TABLE `nvp` (
`rowid` int(11) NOT NULL AUTO_INCREMENT,
`groupid` varchar(45) DEFAULT NULL,
`name` varchar(45) DEFAULT NULL,
`value` varchar(45) DEFAULT NULL,
`created` date DEFAULT NULL,
PRIMARY KEY (`rowid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `t2`.`nvp` (`groupid`, `name`, `value`, `created`) VALUES ('1', 'Fee', '10', '2014-03-01');
INSERT INTO `t2`.`nvp` (`groupid`, `name`, `value`, `created`) VALUES ('1', 'Member', 'Yes', '2014-03-01');
INSERT INTO `t2`.`nvp` (`groupid`, `name`, `value`, `created`) VALUES ('1', 'Type', 'MLB', '2014-03-01');
INSERT INTO `t2`.`nvp` (`groupid`, `name`, `value`, `created`) VALUES ('2', 'Fee', '10', '2014-03-01');
INSERT INTO `t2`.`nvp` (`groupid`, `name`, `value`, `created`) VALUES ('2', 'Member', 'Yes', '2014-03-01');
INSERT INTO `t2`.`nvp` (`groupid`, `name`, `value`, `created`) VALUES ('2', 'Type', 'MLB', '2014-03-01');
INSERT INTO `t2`.`nvp` (`groupid`, `name`, `value`, `created`) VALUES ('3', 'Fee', '10', '2014-03-02');
INSERT INTO `t2`.`nvp` (`groupid`, `name`, `value`, `created`) VALUES ('3', 'Member', 'Yes', '2014-03-02');
INSERT INTO `t2`.`nvp` (`groupid`, `name`, `value`, `created`) VALUES ('3', 'Type', 'MLB', '2014-03-02');
INSERT INTO `t2`.`nvp` (`groupid`, `name`, `value`, `created`) VALUES ('4', 'Fee', '20', '2014-03-03');
INSERT INTO `t2`.`nvp` (`groupid`, `name`, `value`, `created`) VALUES ('4', 'Member', 'Yes', '2014-03-03');
INSERT INTO `t2`.`nvp` (`groupid`, `name`, `value`, `created`) VALUES ('4', 'Type', 'NFL', '2014-03-03');
INSERT INTO `t2`.`nvp` (`groupid`, `name`, `value`, `created`) VALUES ('5', 'Fee', '50', '2014-03-03');
INSERT INTO `t2`.`nvp` (`groupid`, `name`, `value`, `created`) VALUES ('5', 'Member', 'Yes', '2014-03-03');
INSERT INTO `t2`.`nvp` (`groupid`, `name`, `value`, `created`) VALUES ('5', 'Type', 'NBA', '2014-03-03');
INSERT INTO `t2`.`nvp` (`groupid`, `name`, `value`, `created`) VALUES ('6', 'Fee', '50', '2014-03-03');
INSERT INTO `t2`.`nvp` (`groupid`, `name`, `value`, `created`) VALUES ('6', 'Member', 'Yes', '2014-03-03');
INSERT INTO `t2`.`nvp` (`groupid`, `name`, `value`, `created`) VALUES ('6', 'Type', 'NBA', '2014-03-03');
INSERT INTO `t2`.`nvp` (`groupid`, `name`, `value`, `created`) VALUES ('7', 'Fee', '100', '2014-03-04');
INSERT INTO `t2`.`nvp` (`groupid`, `name`, `value`, `created`) VALUES ('7', 'Member', 'No', '2014-03-04');
INSERT INTO `t2`.`nvp` (`groupid`, `name`, `value`, `created`) VALUES ('7', 'Type', 'NBA', '2014-03-04');
所需的输出“透视”表,已过滤,只显示会员以及收取的每笔费用的总和,按日期分组。
Date, MLB, NFL, NBA
2014-03-01, 20, 0, 0
2014-03-02, 10, 0, 0
3014-03-03, 0, 20, 50
任何人都有一些指针? 谢谢。
这是试过SQL:
select tbl2.created,
sum(case when tbl2.type='MLB' then fee else null end) as MLB,
sum(case when tbl2.type='NBA' then fee else null end) as NBA,
sum(case when tbl2.type='NFL' then fee else null end) as NFL
from (select tbl.* from (select
created,
sum(case when nvp.name='Fee' then value else null end) as Fee,
max(case when nvp.name='Type' then value else null end) as Type,
max(case when nvp.name='Member' then value else null end) as member
from nvp group by groupid) AS tbl where member='Yes') as tbl2 group by created;
# query to transpose row/columns, uses max where strings are required, this does filter out the No.
(select tbl.* from (select
created,
sum(case when nvp.name='Fee' then value else null end) as Fee,
max(case when nvp.name='Type' then value else null end) as Type,
max(case when nvp.name='Member' then value else null end) as member
from nvp group by groupid) AS tbl where member='Yes');
请显示您尝试的查询。 –
试试看怎么样?只是谷歌的例子,并尝试自己。 –
@戈登Linoff我添加了我的SQL到帖子,感谢您的期待。 – TSage