管理数据库视图以获得正确的结果

时间:2013-07-14 11:34:22

标签: mysql sql view database

我的观点给出了合理正确的答案:

   DELIMITER $$

DROP VIEW IF EXISTS `test`.`new_temp`$$

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `new_temp` AS 
SELECT `temp`.`pcount` AS `ind_type`,SUM(`temp`.`pcount`) AS `Index_val` FROM `temp` UNION ALL 
SELECT `temp`.`ncount` AS `sum`,SUM(`temp`.`ncount`) AS `ncount` FROM `temp` $$

DELIMITER ;

输出继电器:

ind_type    Index_val
----------------------
2              23
2              34

我希望它能提供这种输出:

New_temp

  ind_type     Index_val
-------------------------------
    pcount         23
    ncount         34

问题在于我编写的代码。我以不同的方式尝试但我没有得到它。任何想法?

2 个答案:

答案 0 :(得分:1)

通常,您可以将值放在规范化的字典表或类似表中。但由于您未在查询中提供任何此类内容,因此以下内容应提供所需的结果。

SELECT 'pcount' AS `ind_type`,SUM(`temp`.`pcount`) AS `Index_val` FROM `temp` UNION ALL 
SELECT 'ncount' AS `ind_type`,SUM(`temp`.`ncount`) AS `ncount` FROM `temp` $$

答案 1 :(得分:1)

您要获得的是列的实际名称而不是它的值。在这种情况下,而不是说

SELECT `temp`.`pcount` AS `ind_type`

喜欢

SELECT 'pcount' AS `ind_type`

修改

不确定给出相同结果是什么意思。我尝试了同样的工作,它工作得很好;如下

create table temp (pcount int,ncount int);

insert into temp values(22,33);

insert into temp values(23,43);


create VIEW new_temp as
select 'pcount' AS 'ind_type',sum(pcount) as 'ind_val'
 from temp 
 union
 select 'ncount' AS 'ind_type',sum(ncount) as 'ind_val'
 from temp;

检查此SQL小提琴http://sqlfiddle.com/#!2/bbcf6/1