2014-08-29 13 views
0

当在下面的select语句中有多个Fieldname(Turnover和NetProfit)时,将mySqlDataAdapter填充到数据表时发生错误。然后我将它放到datagridview中。如何解决它?在单个查询中有多个选择,但有多个不同的字段名称

数据:

FieldName | Ticker| Value| Year 
-- 
Turnover | APPL | 1555 | 2010 
Turnover | APPL | 1688 | 2011 
Turnover | APPL | 1900 | 2012 
Turnover | APPL | 1989 | 2013 
NetProfit | APPL | 123 | 2010 
NetProfit | APPL | 158 | 2011 
NetProfit | APPL | 200 | 2012 
NetProfit | APPL | 300 | 2013 

代码:

Dim da As New MySqlDataAdapter(strSQL, cn) 
Dim dt As New DataTable 
da.Fill(dt) 'error occurred here!!! if more than 1 distinct fieldname 
dgv1.DataSource = dt 

查询:

SELECT 
(SELECT format(Value,0) from Data WHERE Ticker = 'APPL' AND Year = 2010) As 'Y2010' , 
(SELECT format(Value,0) from Data WHERE Ticker = 'APPL' AND Year = 2011) As 'Y2011' , 
(SELECT format(Value,0) from Data WHERE Ticker = 'APPL' AND Year = 2012) As 'Y2012' , 
(SELECT format(Value,0) from Data WHERE Ticker = 'APPL' AND Year = 2013) As 'Y2013' 

输出:(在数据表中的净利润) (如果数据表只包含一个FieldName,称Turnover,所以下面的输出是营业额)

Y2010| Y2011| Y2012| Y2013 
-- 
1555 | 1688 | 1900 | 1989 

输出:(2个字段名中的数据表,即转换和净利润

(未成功)

我所需的输出:(按当前,我已经添加一个标准 “WHERE股票代码=”)

FieldName | Y2010 | Y2011 | Y2012 | Y2013 
-- 
Turnover | 1555 | 1688 | 1900 | 1989 
NetProfit | 123 | 158 | 200 | 300 

下一步所需的输出:(对于所有代号)

Ticker| FieldName | Y2010| Y2011| Y2012| Y2013 
-- 
APPL | Turnover | 1555 | 1688 | 1900 | 1989 
APPL | NetProfit | 123 | 158 | 200 | 300 
MSFT | Turnover | 2555 | 2688 | 1600 | 3489 
MSFT | NetProfit | 133 | 248 | 205 | 300 
+0

对不起,但我没有看到错误? – Steve 2014-08-29 20:40:38

+0

我也没有看到你正在尝试运行的SQL。这两件事对帮助我们都很重要。 – Steve 2014-08-29 20:41:43

+0

我的SQL是在上面的查询。只有当我指定了代码时,它才能正常工作,并且只有一个字段名,不管是营业额还是净利润,但不是两者。 – Trader 2014-08-30 08:29:00

回答

0

这应该得到你想要的结果

select distinct 
cast(data.Ticker as char(20)), 
cast(data.FieldName as char(20)), 
d2010.Value as 'Y2010' , 
d2011.Value as 'Y2011' , 
d2012.Value as 'Y2012' , 
d2013.Value as 'Y2013' 
from data 
inner join data as d2010 on data.FieldName like d2010.FieldName and d2010.Year = 2010 
inner join data as d2011 on data.FieldName like d2011.FieldName and d2011.Year = 2011 
inner join data as d2012 on data.FieldName like d2012.FieldName and d2012.Year = 2012 
inner join data as d2013 on data.FieldName like d2013.FieldName and d2013.Year = 2013 

注:需要distinct演员,如果文本字段是文本类型。我在MSSQL中测试了这一点,并在MySQL验证器中检查了语法。

相关问题