2014-08-29 4 views
0

Когда в приведенном ниже примере указано несколько полей (Turnover и NetProfit), возникает ошибка, когда я заполняю mySqlDataAdapter в datatable. Затем я помещу его в 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' 

выход: (NO Чистая прибыль в таблице DATA) (Если таблица данных содержит только одно полевое имя, скажем, оборот, поэтому ниже результата для оборота)

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

Выход: (2 имя поля в таблице данных, т.е. оборота и чистой прибыли

(не удалось)

Мой Желаемая Выход: (как в настоящее время, у меня есть добавить критерий "WHERE Ticker =")

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

+0

Я также не вижу ваш SQL, который вы пытаетесь запустить. Обе эти вещи очень важны, чтобы иметь возможность помочь. – Steve

+0

мой SQL находится в вышеуказанном запросе. Он отлично работает только тогда, когда я назначил Тикер, и есть только одно полевое имя, либо оборот, либо netprofit, но не оба. – Trader

ответ

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 если текстовые поля типа Text. Я тестировал это в MSSQL и проверял синтаксис в валидаторе MySQL.

Смежные вопросы