如何将查询中的列数据用作数据网格视图中的行
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" -- <--
) )
顺便说一句:您应该编辑您的原始问题,而不是发布答案,但我理解您的技术问题;-) 请阅读本网站上的帮助页面。
大家好(抱歉我的英语不太好)
我有一个包含 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" -- <--
) )
顺便说一句:您应该编辑您的原始问题,而不是发布答案,但我理解您的技术问题;-) 请阅读本网站上的帮助页面。