Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

pedrovisk

Tabela Dinâmica

Recommended Posts

Olá turma!

 

Eu gostaria de saber como montar uma tabela conforme imagem abaixo:

 

Imagem Postada

 

Eu estou utilizando a seguinte consulta em SQL:

 

SELECT DISTINCT TOP 100 PERCENT dbo.EST_Produto.NomeProduto AS Produto, dbo.Localizacao.NomeLocal, dbo.Departamento.NomeDep AS Departamento, 
				  SUM(dbo.EST_Item_Cesta.Quantidade) AS Quantidade, dbo.EST_Cesta.DtSolicitacao, dbo.EST_Item_Cesta.IDDepartamento, 
				  dbo.EST_Cesta.IDSolicitante AS Solicitante
FROM dbo.EST_Cesta INNER JOIN dbo.EST_Item_Cesta ON dbo.EST_Cesta.IDEstCesta = dbo.EST_Item_Cesta.IDCesta INNER JOIN dbo.EST_Produto ON dbo.EST_Item_Cesta.IDProduto = dbo.EST_Produto.IDEstProduto INNER JOIN dbo.EST_Solicita_Material ON dbo.EST_Cesta.IDEstCesta = dbo.EST_Solicita_Material.idCesta INNER JOIN dbo.Departamento ON dbo.EST_Item_Cesta.IDDepartamento = dbo.Departamento.Handle INNER JOIN dbo.Localizacao ON dbo.Departamento.IdLocal = dbo.Localizacao.Handle
WHERE (dbo.EST_Cesta.DtSolicitacao > CONVERT(DATETIME, '2007-04-01 00:00:00', 102)) AND (dbo.EST_Cesta.DtSolicitacao < CONVERT(DATETIME, 
				  '2007-04-30 23:59:59', 102))
GROUP BY dbo.EST_Produto.NomeProduto, dbo.Departamento.NomeDep, dbo.EST_Cesta.DtSolicitacao, dbo.EST_Item_Cesta.IDDepartamento, 
				  dbo.EST_Cesta.IDSolicitante, dbo.Localizacao.NomeLocal
ORDER BY dbo.Departamento.NomeDep, SUM(dbo.EST_Item_Cesta.Quantidade) DESC, dbo.EST_Produto.NomeProduto, dbo.EST_Item_Cesta.IDDepartamento

 

Eu acho que não precisa alterar a consulta, meu problema é apenas no ASP.

 

Quem puder me ajudar, muito obrigado.

 

Pedro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, todos os campos estão na sua SQL? se sim é só montar "na unha" a tabela html (não é isso?) com apenas uma linha e depois apenas repetir no While de seu código de exibição.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salgado,Todos os campos estão, mas eu quero que só sejam mostradas as colunas de acordo com o conteúdo do BD. A tabela básica já foi criada. Eu não como deixa as colunas e linhas de acordo com o conteúdo.Encontrei alguns exemplos aqui no fórum, mas não fica conforme acima.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Camarada,Por favor para facilitar a ajuda post a sua tabela que você montou sem o conteúdo.t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara,

 

Como eu não sei por onde começar, tenho apenas a tabela em HTML sem ASP

 

<table width="200" border="1" cellpadding="0" cellspacing="1">  <tr>	<td> </td>	<td> </td>  </tr>  <tr>	<td> </td>	<td> </td>  </tr>  <tr>	<td> </td>	<td> </td>  </tr></table>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apenas um exemplo:

 

<table width="200" border="1" cellpadding="0" cellspacing="1">  <tr>	<td>Campo1</td>	<td>Campo2</td>	<td>Campo3</td>  </tr><% while not rs.eof %>  <tr>	<td><% = rs("campo1") %></td>	<td><% = rs("campo2") %></td>	<td><% = rs("campo3") %></td>  </tr><% rs.movenextwend %></table>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Atulamente, minha tabela é gerada conforme a imagem abaixo:

 

Imagem Postada

 

<table width="95%" border="0" cellspacing="1" cellpadding="0" class="Linha_Verde_Tabela">	  <tr align="center" class="Lista_rs">		<td colspan="6" align="center"><strong>Período:</strong> <%=Request.Form("DtInicial")%> <strong>à</strong> <%=Request.Form("DtFinal")%></td>	  </tr>	 <%Ds_Solicitacao = ""	   nrLinha = 0	   Total = 0	Do While Not Rs.Eof	   	If (Cint(nrLinha) mod 2) > 0 Then			strCor = "#F4F4F4"	 	Else			strCor = "#E0EEE0"	 	End If	   If Ds_Solicitacao <> Rs("IDDepartamento") Then %>	  <tr align="center">		<td colspan="6" align="left" class="Titulo1_Verde_Tabela_Media">Departamento: <%=(rs.Fields.Item("Departamento").Value)%></td>	  </tr>			 <tr align="center" class="Titulo2_Verde_Tabela_Media">		 <td width="41%">Produto</td>		 <td width="16%">Quantidade</td>		 <td width="27%">Solicitante</td>		 <td width="16%">Data Solicitação </td>	  </tr>	   <%End If		Ds_Solicitacao = Rs("IDDepartamento")		%>			  			   <tr bgcolor="<%=strCor%>" class="Lista_rs_Linha" onMouseOver="this.style.backgroundColor='#FFFF99'; this.style.cursor='hand';" onMouseOut="this.style.backgroundColor='';">		<td align="left">- <%=(rs.Fields.Item("Produto").Value)%></td>		<td align="center"><%=(rs.Fields.Item("Quantidade").Value)%></td>		<td align="center"><%=(rs.Fields.Item("NomeUsu").Value)%></td>		<td align="center"><%=(rs.Fields.Item("DtSolicitacao").Value)%></td>	  </tr>	<% nrLinha =nrLinha + 1	   RS.MOVENEXT		  Loop	   Rs.movefirst	%>	  <tr>		<td colspan="6" class="Titulo1_Verde_Tabela_Media"> </td>	  </tr></table>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Turma,

 

Aqui está a página que gera dinamicamente a tabela.

 

Clique aqui para ver como está

 

Eu gostaria que cada um dos departamentos, distintamente, fosse para o TOPO e os demais campos ao lado da coluna Produtos, conforme primeira imagem acima (tabela).

 

Aqui está o ASP da página (link) acima:

 

<table width="600" border="0" cellpadding="0" cellspacing="1"><%  'Informa a quantidade de campos	QtdCampos = rs.Fields.Count -1 %>  <tr align="center" class="Titulo2_Verde_Tabela">	<td>Tabela Dinâmica</td>  </tr>  <tr align="center" class="Titulo2_Verde_Tabela_Media"><% 	'Coloca o cabeçalho de cada coluna com o nome do campo	For i = 0 To QtdCampos%>  	<td width="20"><%= Server.HTMLEncode(rs(i).name) %></td>	<% 	Next %>  </tr><% ' Preenche a tabela com os registrosDo While Not rs.EOF		If strCor = "#C1DCDC" Then		 strCor = "#E0EEE0"	  Else		 strCor = "#C1DCDC"	  End If%>    <tr align="center" class="Font_Peq_Form_Normal" bgcolor="<%=strCor%>"><% For i = 0 To QtdCampos %>  	<td><% = Server.HTMLEncode(rs.fields(i).value) %></td><% next %>	  </tr><% rs.MovenextLoop%>    <tr>	<td> </td>  </tr></table>
Abaixo está a query da página acima:

 

SELECT dbo.EST_Produto.NomeProduto AS Produto, dbo.Departamento.NomeDep AS Departamento, SUM(dbo.EST_Item_Cesta.Quantidade) AS Quantidade, dbo.Usuario.NomeUsu, dbo.EST_Cesta.DtSolicitacao, dbo.EST_Item_Cesta.IDDepartamento, dbo.EST_Item_Cesta.Quantidade AS Qtd FROM dbo.EST_Cesta INNER JOIN dbo.EST_Item_Cesta ON dbo.EST_Cesta.IDEstCesta = dbo.EST_Item_Cesta.IDCesta INNER JOIN dbo.EST_Produto ON dbo.EST_Item_Cesta.IDProduto = dbo.EST_Produto.IDEstProduto INNER JOIN dbo.EST_Solicita_Material ON dbo.EST_Cesta.IDEstCesta = dbo.EST_Solicita_Material.idCesta INNER JOIN dbo.Departamento ON dbo.EST_Item_Cesta.IDDepartamento = dbo.Departamento.Handle INNER JOIN dbo.Usuario ON dbo.EST_Cesta.IDSolicitante = dbo.Usuario.Handle WHERE (dbo.EST_Cesta.DtSolicitacao > CONVERT(DATETIME, '2007-05-01 00:00:00', 102)) AND (dbo.EST_Cesta.DtSolicitacao < CONVERT(DATETIME, '2007-05-15 23:59:59', 102))GROUP BY dbo.EST_Produto.NomeProduto, dbo.Departamento.NomeDep, dbo.Usuario.NomeUsu, dbo.EST_Cesta.DtSolicitacao, dbo.EST_Item_Cesta.IDDepartamento, dbo.EST_Item_Cesta.Quantidade, dbo.EST_Produto.Tipo HAVING (dbo.EST_Item_Cesta.Quantidade <> 0) AND (dbo.EST_Produto.Tipo = 'Geral') ORDER BY dbo.Departamento.NomeDep, SUM(dbo.EST_Item_Cesta.Quantidade) DESC
Eu preciso alterar a consulta acima?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguém sabe como colocar esses departamentos no Topo e os Produtos na coluna da esquerda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

primeiro você faz um select para listar os Departamentos, faz o while e dentro desse while você faz outro select paraa buscar os outros dados quando o ID do departamento estiver relacionado e faz outro while

Compartilhar este post


Link para o post
Compartilhar em outros sites

Jonathan,Eu não entendi o segundo ítem, na questão do While e depois fazer um outro While.você poderia descrever melhor esso procedimento?Muito obrigado pela ajuda,Pedro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Siga a lógica

set rs=conn.execute("select * from departamento order by nome")do while not rs.eofresponse.write(rs("nome")&"<br>")set rs2=conn.execute("select * from produto order by nome where id_departamento="&rs("id"))do while not rs2.eofresponse.write(rs2("nome")&"<br>")rs.movenextrs.movenextloop

Compartilhar este post


Link para o post
Compartilhar em outros sites

Jonathan,

 

Mas como meus departamentos irão sair no topo? Desta forma não tem como. É possível eu deixar igual a imagem do link abaixo?

https://www2.casablanca.tur.br/sisconti/Tabela_Dinamica.jpg

Ou seja

Produtos na Primeira Coluna-> Departamentos no Topo-> E valores de Produtos para seus devidos Departamentos.

 

Muito obrigado,

 

Pedro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, a lógica que lhe passei faz isso, o restante fica a cargo do html formatar como deseja

Compartilhar este post


Link para o post
Compartilhar em outros sites

Jonathan,

 

Fiz conforme sua sugestão, mas não consigo deixar os departamentos LADO A LADO, gera tudo em uma única linha.

 

https://www2.casablanca.tur.br/sisconti/Relatorio2.asp

 

Aqui está o ASP:

 

<% Do While NOT rs.EOF %>	<%response.write("<br><strong>"&rs("NomeDep")&"</strong><br>")		Set rs2 = Server.CreateObject("ADODB.Recordset")		SQL = "SELECT dbo.EST_Produto.NomeProduto AS Produto, SUM(dbo.EST_Item_Cesta.Quantidade) AS Quantidade, dbo.EST_Cesta.DtSolicitacao,"	SQL = SQL & "dbo.EST_Item_Cesta.IDDepartamento, dbo.EST_Item_Cesta.Quantidade AS Qtd "	SQL = SQL & "FROM dbo.EST_Cesta "	SQL = SQL & "INNER JOIN dbo.EST_Item_Cesta ON dbo.EST_Cesta.IDEstCesta = dbo.EST_Item_Cesta.IDCesta "	SQL = SQL & "INNER JOIN dbo.EST_Produto ON dbo.EST_Item_Cesta.IDProduto = dbo.EST_Produto.IDEstProduto "	SQL = SQL & "INNER JOIN dbo.EST_Solicita_Material ON dbo.EST_Cesta.IDEstCesta = dbo.EST_Solicita_Material.idCesta "	SQL = SQL & "WHERE (dbo.EST_Cesta.DtSolicitacao > CONVERT(DATETIME, '2007-05-01 00:00:00', 102)) AND (dbo.EST_Cesta.DtSolicitacao < CONVERT(DATETIME, '2007-05-15 23:59:59', 102)) "	SQL = SQL & "GROUP BY dbo.EST_Produto.NomeProduto, dbo.EST_Cesta.DtSolicitacao, dbo.EST_Item_Cesta.IDDepartamento, dbo.EST_Item_Cesta.Quantidade, dbo.EST_Produto.Tipo "	SQL = SQL & "HAVING (dbo.EST_Produto.Tipo = 'Geral') AND (SUM(dbo.EST_Item_Cesta.Quantidade) <> 0) AND (dbo.EST_Item_Cesta.IDDepartamento = "&rs("Handle")&") "	SQL = SQL & "ORDER BY SUM(dbo.EST_Item_Cesta.Quantidade) DESC "		'Response.Write SQL	'Response.End()	Set rs2 = abredb.Execute(SQL)		Do While Not rs2.eof		response.write(rs2("Produto")&"<br>")		response.write(rs2("Quantidade")&"<br>")	rs2.movenext	Looprs.MoveNext()Loop%>
Muito obrigado,

 

Pedro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

exiba os registros utilizando uma tabela imprimindo em colunas, veja no tópico pendurado Dúvidas Frequentes, lá tem um pequeno exemplo para exibir em colunas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Jonathan,

 

O máximo que consegui foi isso, https://www2.casablanca.tur.br/sisconti/Relatorio3.asp

 

Eu gostaria que ficasse conforme esta imagem https://www2.casablanca.tur.br/sisconti/Tabela_Dinamica.jpg

 

Aqui está o ASP como está

 

<table width="100%" border="0" cellpadding="0" cellspacing="1">  <%   Dim contador   contador = 1   maxcol = 30	'<------------------ numero de registros por colunasDo While NOT rs.EOF %>	<%	Set rs2 = Server.CreateObject("ADODB.Recordset")		SQL = "SELECT dbo.EST_Produto.NomeProduto AS Produto, SUM(dbo.EST_Item_Cesta.Quantidade) AS Quantidade, dbo.EST_Cesta.DtSolicitacao,"	SQL = SQL & "dbo.EST_Item_Cesta.IDDepartamento, dbo.EST_Item_Cesta.Quantidade AS Qtd "	SQL = SQL & "FROM dbo.EST_Cesta "	SQL = SQL & "INNER JOIN dbo.EST_Item_Cesta ON dbo.EST_Cesta.IDEstCesta = dbo.EST_Item_Cesta.IDCesta "	SQL = SQL & "INNER JOIN dbo.EST_Produto ON dbo.EST_Item_Cesta.IDProduto = dbo.EST_Produto.IDEstProduto "	SQL = SQL & "INNER JOIN dbo.EST_Solicita_Material ON dbo.EST_Cesta.IDEstCesta = dbo.EST_Solicita_Material.idCesta "	SQL = SQL & "WHERE (dbo.EST_Cesta.DtSolicitacao > CONVERT(DATETIME, '2007-05-01 00:00:00', 102)) AND (dbo.EST_Cesta.DtSolicitacao < CONVERT(DATETIME, '2007-05-15 23:59:59', 102)) "	SQL = SQL & "GROUP BY dbo.EST_Produto.NomeProduto, dbo.EST_Cesta.DtSolicitacao, dbo.EST_Item_Cesta.IDDepartamento, dbo.EST_Item_Cesta.Quantidade, dbo.EST_Produto.Tipo "	SQL = SQL & "HAVING (dbo.EST_Produto.Tipo = 'Geral') AND (SUM(dbo.EST_Item_Cesta.Quantidade) <> 0) AND (dbo.EST_Item_Cesta.IDDepartamento = "&rs("Handle")&") "	SQL = SQL & "ORDER BY SUM(dbo.EST_Item_Cesta.Quantidade) DESC "		'Response.Write SQL	'Response.End()	Set rs2 = abredb.Execute(SQL)		Do While Not rs2.eof		If contador <= maxcol Then %>			<td><span class="style1"><%=rs2("Produto")%></span></td>			<td><span class="style1"><%=rs2("Quantidade")%></span></td>			<% 			contador = contador + 1 		Else 			%> 	</tr><tr> 			<td><span class="style1"><%=rs2("Produto")%></span></td>			<td><span class="style1"><%=rs2("Quantidade")%></span></td>			<% 			contador = 2 		End if 	rs2.movenext	Loop'completa as colunas do while contador <= maxcol %>   <td> </td> <%  contador = contador + 1 loop %> </tr> <%rs.MoveNext()Loop%></table>
Valeu pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.