如何将查询中的列数据用作数据网格视图中的行

How to using column data from query as row in datagridview

大家好(抱歉我的英语不太好)

我有一个包含 3 列的查询,这些列从 Oracle 数据库中获取数据,我想将这些列之一用作 datagridview 中的行。

这就像 "name"、"date" 和 "count of names" 列,"date" 列必须是数据网格中的一行,下面是其余的列。

有人知道我如何在 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').

谢谢。

所以你有我第一个 table 中的数据,想要第二个 table 中的数据?

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 的内容,查找词 "Prior to 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"  -- <--
    ) )

顺便说一句:您应该编辑您的原始问题,而不是发布答案,但我理解您的技术问题;-) 请阅读本网站上的帮助页面。