Usuário com melhor resposta
Criar um PIVOT dinâmico

Pergunta
-
O cenário é o seguinte:
Tenho 4 tabelas:
Veiculos:
Campo
Tipo
Placa
Varchar(7) - Chave
numCarro
varchar(3)
Vendido
bit
Alunos:
Campo
Tipo
idAluno
int
apelido
varchar(20)
Turno:
Campo
Tipo
idTurno
int
Turno
Time
QuadroHorario:
Campo
Tipo
Data
DateTime - Chave
Carro
varchar(3) - Chave
ItensQuadroHorario:
Campo
Tipo
Data
DateTime
Carro
varchar(3)
Hora
Time
Preciso realizar um PIVOT com essas tabelas e que me apresente os dados com o join abaixo:
SELECT IQHD.Hora,QHD.carro, A.apelido FROM tblAlunos A INNER JOIN tblItensQuadroHorarioDir IQHD ON A.idAluno = IQHD.idAluno INNER JOIN tblQuadroHorarioDir QHD ON IQHD.Carro = QHD.carro INNER JOIN tblVeiculos V ON QHD.carro = V.numCarro INNER JOIN tblTurnos T ON IQHD.Hora = T.descricao
Esse script apresenta a tabela da seguinte forma:
Hora
Carro
Apelido
07:00
004
FLAVIA
07:50
009
ARTUR
07:50
003
VITORIA
O objetivo do PIVOT nessa consulta é deixar o grid da seguinte forma:
Hora
003
004
009
07:00
FLAVIA
07:50
VITORIA
ARTUR
Sendo que preciso organizar os horários e os veículos como aparecem, de forma crescente.
Alguém pode me orientar? Eu já fiz isso em ACCESS e DELPHI e estou tentando migrar o sistema para o
C# mas o PIVOT do ACCESS não tem a menor semelhança com o que é usado no SQLServer.
Marcello M. M.
segunda-feira, 19 de maio de 2014 23:49
Respostas
-
Deleted
- Sugerido como Resposta Ricardo Barbosa Cortes terça-feira, 20 de maio de 2014 12:46
terça-feira, 20 de maio de 2014 00:45
Todas as Respostas
-
Deleted
- Sugerido como Resposta Ricardo Barbosa Cortes terça-feira, 20 de maio de 2014 12:46
terça-feira, 20 de maio de 2014 00:45 -
FINO ZÉ!! Funfou legal. Agora só tratar para que as células que apresentam a palavra 'NULL' apresentarem um string vazio. Valeu mesmo irmão.
Braços. qqCoisa eu retorno...
- Marcado como Resposta Marcello M. Mariano terça-feira, 20 de maio de 2014 17:59
terça-feira, 20 de maio de 2014 17:59 -
Boa tarde Jose!
Então, seguinte eu alterei parte do seu código para gerar a tabela PIVOT substituindo a parte da criação por uma view. Funcionou perfeitamente. Mas para apresentar o resultado no C# tô sofrendo pra caramba! Não estou conseguindo implementar o tratamento do SELECT para apresenta-lo. Sendo que estou usando programação em camadas. Eu tenho:
OBJETO TRANSFERENCIA:
namespace ObjetoTransferencia
{
public class QuadroHorarioPivot
{
public DateTime Data { get; set; }
public string Carro { get; set; }
public DateTime Hora { get; set; }
public int idAluno { get; set; }
public string apelido { get; set; }namespace ObjetoTransferencia
{
public class QuadroHorarioPivotColecao:List<QuadroHorarioPivot>
{
}
}NEGÓCIOS:
public QuadroHorarioPivotColecao ConsultarQuadro(DateTime Data)
{
try
{
//CRIA UMA NOVA COLECAO QUADRO HORARIO
QuadroHorarioPivotColecao quadroHorarioPivotColecao = new QuadroHorarioPivotColecao();
acessoDadosSqlServer.LimparParametros();
acessoDadosSqlServer.AdicionarParametros("@Data", Data);
//CRIA UMA DATATABLE
DataTable dataTableQuadroOrigem = acessoDadosSqlServer.ExecutarConsultar(CommandType.StoredProcedure, "uspQuadroHorarioDirConsultar");
foreach (DataRow linha in dataTableQuadroOrigem.Rows)
{
QuadroHorarioPivot quadroHorarioPivot = new QuadroHorarioPivot();
//quadroHorarioPivot.Data = Convert.ToDateTime(linha["Data"]);
quadroHorarioPivot.Carro = Convert.ToString(linha["Carro"]);
quadroHorarioPivot.Hora=Convert.ToDateTime(linha["Hora"]);
//quadroHorarioPivot.idAluno = Convert.ToInt32(linha["idAluno"]);
quadroHorarioPivot.apelido = Convert.ToString(linha["apelido"]);
quadroHorarioPivotColecao.Add(quadroHorarioPivot);
}
return quadroHorarioPivotColecao;
}
catch (Exception exception)
{
throw new Exception("Não foi possível consultar quadro de horários. Detalhes : " + exception.Message);
}
}Sei que na clase Obeto Transferencia e tambem antes do 'foreach' eu tenho que tratar os dados retornados para substituir o campo quadroHorarioPivot.Carro = Convert.ToString(linha["Carro"]); para me retornar o número de cada carro, mas não estou conseguindo. Pode ser uma nova ajuda ae?
Vlw de novo brother.
quinta-feira, 4 de dezembro de 2014 19:06