-1

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

   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

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

4

2 回答 2

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

于 2013-07-14T11:46:03.200 回答
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` $$
于 2013-07-14T11:41:08.860 回答