如何将查询中的列数据用作datagridview中的行

时间:2015-03-04 15:27:38

标签: c# winforms oracle datagridview

大家好(对不起我的英文,不太好)

我有一个包含3列的查询,这些列从Oracle数据库中提取数据,我想在datagridview中使用其中一列作为行。

就像列“名称”,“日期”和“名称数”一样,“日期”列必须是数据网格中的一行,下面是其余的列。

有人知道如何在c#中做到这一点吗? 我正在制作一个winform应用程序。

我清楚了吗?如果有人不理解我,请告诉我,而不是再尝试解释。

以下是来自Oracle的查询。

SELECT UPPER(U.NOME) INTEGRANTE, 
 TO_CHAR(TRUNC(L.DATALOG), 'dd/mm/yyyy') DATALOG,
  count(U.NOME) TOTAL
  FROM rastreabilidade.LOGPROCESSO L, 
  rastreabilidade.SITUACAO S, 
  rastreabilidade.USUARIO U, 
  rastreabilidade.PERFIL P,
  rastreabilidade.documento doc,  
  rastreabilidade.subtipodocumento std,
  rastreabilidade.tipodocumento td, 
  rastreabilidade.unidade un
WHERE TRUNC(L.DATALOG) BETWEEN TO_DATE('01-02-2015', 'DD/MM/YYYY')AND TO_DATE('27-02-2015', 'DD/MM/YYYY') AND L.SITUACAOID NOT IN ('0') 
  AND L.SITUACAOID = S.SITUACAOID 
  AND L.USUARIOID = U.USUARIOID 
  AND U.PERFILID = P.PERFILID 
  AND L.DOCUMENTOID = DOC.DOCUMENTOID 
  AND DOC.TIPODOCUMENTOID = TD.TIPODOCUMENTOID 
  AND DOC.SUBTIPODOCUMENTOID = STD.SUBTIPODOCUMENTOID
  AND DOC.UNIDADEID = UN.UNIDADEID
  AND P.PERFILID IN ('786','10000','10001','10002','3070')
  GROUP BY UPPER(U.NOME), TO_CHAR(TRUNC(L.DATALOG), 'dd/mm/yyyy')
  ORDER BY TO_CHAR(TRUNC(L.DATALOG), 'dd/mm/yyyy').

谢谢。

1 个答案:

答案 0 :(得分:0)

所以你有我的第一张表中的数据,想要第二张表吗?

You have this:                      ... and you want this:
INTEGRANTE DATALOG     TOTAL  |     INTEGRANTE  04/03/2015  20/02/2015  27/02/2015
BOB        04/03/2015     11  |     GEORGE               7           9           8
BOB        20/02/2015      3  |     BOB                 11           3           2
BOB        27/02/2015      2  |     MARY                 4           6           5
GEORGE     04/03/2015      7  |
GEORGE     20/02/2015      9  |
GEORGE     27/02/2015      8  |
MARY       04/03/2015      4  |
MARY       20/02/2015      6  |
MARY       27/02/2015      5  |

如果是这样,那么您可以使用C#代码构建SQL查询,类似于下面的查询,使用简单的foreach loop,并在您的句点中给出日期。 它不是超级优雅的解决方案,但应该有效。

重要!这需要Oracle 11g或更高版本。对于旧版本,您需要构建类似于this article的内容,寻找单词"在11 g之前......"

with YOUR_QUERY as (
  /*YOUR QUERY GOES HERE*/        -- <-- put your actual query here
  )
select * 
  from YOUR_QUERY        
  pivot (sum(total) for (datalog) in (
    '04/03/2015' as "04/03/2015", -- <-- 
    '20/02/2015' as "20/02/2015", -- <-- BUILD THESE LINES IN C# LOOP
    '27/02/2015' as "27/02/2015"  -- <--
    ) )
顺便说一句:你应该编辑原来的问题,而不是发布答案,但我理解你的技术问题;-)请阅读本网站的帮助页面。