大家好(对不起我的英文,不太好)
我有一个包含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').
谢谢。
答案 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" -- <--
) )
顺便说一句:你应该编辑原来的问题,而不是发布答案,但我理解你的技术问题;-)请阅读本网站的帮助页面。