如何在数据库中获取此输出? [英] How do I get This Output in database?
问题描述
我有以下数据:
Year_1 Year_2 Year_3 Year_1_Value Year_2_Value Year_3_Value
-------------------------------------------------- -------------------
2010 2011 2012 155119145
我该如何选择以下
从表中选择Year_1_Value AS Year_1;
(类似于从表中选择Year_1_Value AS"2010")
输出如下:
2010
------
155
有人可以帮我吗?
提前谢谢!!< b></b>
I have data as
Year_1 Year_2 Year_3 Year_1_Value Year_2_Value Year_3_Value
---------------------------------------------------------------------
2010 2011 2012 155 119 145
how can i select following
select Year_1_Value AS Year_1 from table;
(Similar to select Year_1_Value AS ''2010'' from table)
output like:
2010
------
155
can any one help me??
thanx in advance!!<b></b>
推荐答案
这似乎是一个糟糕的设计.不应将年份和值作为单独的列,而应使用包含两列的表:
-年
-值
因此表中的数据将是:
年值
---- -----
2010 155
2011 119
2012 145
这样,您总是可以从同一列中查询适当的年份.列名称的含义是,如果要在UI中显示年份,则应从数据中(从Year列中)获取正确的标签/文本/等.
This looks like a bad design. Instead of having years and values as separate columns, you should use a table with two columns:
- Year
- Value
So the data in the table would be:
Year Value
---- -----
2010 155
2011 119
2012 145
With that, you would query for proper year always from the same column. What comes to the column name, if you want to show the year in the UI, you should fetch the proper label/text/etc from the data (from Year column).
您好,mika ,
thnx提出建议,但是我必须以这种标准的bcoz方式进行操作,然后我使用Pivoting ...通过以下代码获得了解决方案....
创建过程`table_name`(
PYear_1 VARCHAR(50),
PYear_2 VARCHAR(50),
PYear_3 VARCHAR(50),
PYear_4 VARCHAR(50),
PYear_5 VARCHAR(50),
PYear_6 VARCHAR(50),
PYear_7 VARCHAR(50),
PYear_8 VARCHAR(50)
)
开始
SET @ NYear_1 = PYear_1;
SET @ NYear_2 = PYear_2;
SET @ NYear_3 = PYear_3;
SET @ NYear_4 = PYear_4;
SET @ NYear_5 = PYear_5;
SET @ NYear_6 = PYear_6;
SET @ NYear_7 = PYear_7;
SET @ NYear_8 = PYear_8;
SET @s = CONCAT("SELECT id,
SUM(IF(Year_1 =,@ NYear_1,",Year_1_Value,0))AS'',@ NYear_1,"'',
SUM(IF(Year_2 =,@ NYear_2,",Year_2_Value,0))AS'',@ NYear_2,"'',
SUM(IF(Year_3 =,@ NYear_3,",Year_3_Value,0))AS'',@ NYear_3,"'',
SUM(IF(Year_4 =,@ NYear_4,",Year_4_Value,0))AS'',@ NYear_4,"'',
SUM(IF(Year_5 =,@ NYear_5,",Year_5_Value,0))AS'',@ NYear_5,"'',
SUM(IF(Year_6 =,@ NYear_6,",Year_6_Value,0))AS'',@ NYear_6,"'',
SUM(IF(Year_7 =,@ NYear_7,",Year_7_Value,0))AS'',@ NYear_7,"'',
SUM(IF(Year_8 =,@ NYear_8,",Year_8_Value,0))AS'',@ NYear_8,"''
FROM table where tableid = 19 GROUP BY id);
从@s准备stmt;
执行stmt;
END
Hi mika,
thnx for suggestion, but i have to do it in that way bcoz of such criteria, and i got the solution through the following code using Pivoting....
CREATE PROCEDURE `table_name`(
PYear_1 VARCHAR(50),
PYear_2 VARCHAR(50),
PYear_3 VARCHAR(50),
PYear_4 VARCHAR(50),
PYear_5 VARCHAR(50),
PYear_6 VARCHAR(50),
PYear_7 VARCHAR(50),
PYear_8 VARCHAR(50)
)
BEGIN
SET @NYear_1 =PYear_1;
SET @NYear_2 =PYear_2;
SET @NYear_3 =PYear_3;
SET @NYear_4 =PYear_4;
SET @NYear_5 =PYear_5;
SET @NYear_6 =PYear_6;
SET @NYear_7 =PYear_7;
SET @NYear_8 =PYear_8;
SET @s = CONCAT("SELECT id,
SUM( IF( Year_1 = ", @NYear_1,", Year_1_Value, 0 ) ) AS ''", @NYear_1,"'',
SUM( IF( Year_2 = ", @NYear_2,", Year_2_Value, 0 ) ) AS ''", @NYear_2,"'',
SUM( IF( Year_3 = ", @NYear_3,", Year_3_Value, 0 ) ) AS ''", @NYear_3,"'',
SUM( IF( Year_4 = ", @NYear_4,", Year_4_Value, 0 ) ) AS ''", @NYear_4,"'',
SUM( IF( Year_5 = ", @NYear_5,", Year_5_Value, 0 ) ) AS ''", @NYear_5,"'',
SUM( IF( Year_6 = ", @NYear_6,", Year_6_Value, 0 ) ) AS ''", @NYear_6,"'',
SUM( IF( Year_7 = ", @NYear_7,", Year_7_Value, 0 ) ) AS ''", @NYear_7,"'',
SUM( IF( Year_8 = ", @NYear_8,", Year_8_Value, 0 ) ) AS ''", @NYear_8,"''
FROM table where tableid=19 GROUP BY id");
PREPARE stmt FROM @s;
EXECUTE stmt;
END
这篇关于如何在数据库中获取此输出?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!