segunda-feira, 6 de janeiro de 2025
Home
Artigos
Banco de Dados
Access
Firebird
Microsoft SQL Server
MySql
Oracle
Sybase
BI
QlikView
Dicas de Internet
e-business
Hardware
Multimídia
Flash
Programação
.NET/ASP.NET
.NET/C#
.NET/Framework
.NET/VB.NET
ASP
C/C++
Clipper
Cobol
CSS
Delphi
Java
Javascript
JSP
Palm
Perl
PHP
Shell
Visual Basic
WAP
Redes
Segurança
Servidores E-mail
Servidores Web
Apache
Microsoft IIS
Sistemas Operacionais
AIX
DOS
HPUX
Linux
Palm OS
Solaris
True64
Windows 7
Windows 9X
Windows NT
Windows Vista
Windows XP
Software Review
PC
Storages
Veritas VM
Conteúdo atual do site:
[807] ítens, entre artigos, funções e documentos.
Pesquisa Rápida:
Últimos 3 acessos:
Alexandre Neves 03/03/2015 11:08:01 167 acesso(s) alexandre neves 03/03/2015 11:06:42 1 acesso(s) Marcelo Torres 21/01/2015 15:24:53 61 acesso(s)
Opções:
Listagem completa Listagem simples
Ranking Colaboradores:
Adenilton Rodrigues - [304] Alexandre Neves - [61] Douglas Freire - [54] Marcelo Giovanni - [53] Marcelo Torres - [43] Angelita Bernardes - [31] Addy Magalhães Cunha - [28] Manuel Fraguas - [24] Ludmila Valadares - [20] Marcelo Capelo - [18]
Rotina que permite a execução de um crosstab em uma tabela ADO SQL Server. Ela rotaciona os eixos X e Y da Query, transformando linhas em colunas e vice versa. Ideal para Cubos de dados e aplicações de B.I.
//============================================================================== // Realiza um Crosstab em uma tabela ADO padrão SQL Server //------------------------------------------------------------------------------ // Parametros: // ADOQuery : Objeto ADOQuery já devidamente conectado ao banco // SQLCommand: Comando SQL para recuperar o recordset, pode-se usar Join // RowField: Campo a ser utilizado como a informação das linhas (Eixo Y) // RowTitle: Titulo para o campo RowField. Pode ser vazio. // ColField: Campo a ser utilizado como a informação das colunas (Eixo X) // SummaryField: Campo NUMERICO a ser utilizado para totalização. // Operation: Tipo de operaçao a ser realizada Soma (SUM) ou Contagem (Count) //============================================================================== // // Exemplo: Total de Produtos vendidos em cada Estado //----------------------------------------------------------- // 1o. Exemplo: CrossTab(ADOQuery1,FSQL,'Produto','Produto','Estado','Quantidade','Count'); //---------------------------------------------------- // Produtos MG SP RJ Total // Lapis 10 11 20 41 // Borracha 5 10 10 25 // Caderno 1 2 8 11 //---------------------------------------------------- // //----------------------------------------------------------- // 2o. Exemplo: CrossTab(ADOQuery1,FSQL,'Estado','Estado','Produto','Quantidade','Count'); //----------------------------------------------------------- //Estado Lapis Borracha Caderno Total //MG 10 5 1 16 //SP 11 10 2 23 //RJ 20 10 8 38 //----------------------------------------------------------- // Procedure CrossTab(ADOQuery1:TADOQuery; SQLCommand, RowField, RowTitle, ColField , SummaryField:STring; Operation:String='Sum'); Var Str, Value : String; Begin With ADOQuery1 do Begin DisableControls; Screen.Cursor := crSQLWait; Try Close; SQL.Text := 'SELECT DISTINCT '+ColField+' FROM ('+SQLCommand+') AS COLUMNS'; Open; If RowTitle = '' Then RowTitle := RowField; Str := 'SELECT '+RowField+' as '+#39+RowTitle+#39+','; While not ADOQuery1.Eof do Begin Value := ADOQuery1.FieldByName(ColField).AsString; If Value='' Then Value := 'Não Informado'; Value := StringReplace(Value,'.','_',[rfReplaceAll]); Str := Str + Operation+'( CASE '+ColField+' WHEN '+#39+Value+#39+' THEN '+SummaryField+' END) as '+#39+Value+#39+','; ADOQuery1.Next; End; Str := Str + ' '+Operation+'('+SummaryField+') as Total'; Str := Str + ' FROM ('+SQLCommand+' AS B ) AS A'; Str := Str + ' GROUP BY '+RowField+' ORDER BY '+RowField+''; AdoQuery1.Close; AdoQuery1.SQL.Text := Str; Form1.Memo1.Lines.Text := SQL.Text; AdoQuery1.Open; Finally Screen.Cursor := crDefault; EnableControls; End; End; End; Quebra-Linha Colaborador..: Adenilton Rodrigues Categoria(s).: Banco de Dados; Microsoft SQL Server; Data.........: 13/12/2002 15:58:30 Visualizado..: 3484 vezes Fonte........: AdeN Knowledge DB
Adenilton Rodrigues
Banco de Dados Microsoft SQL Server
Últimos Artigos deste colaborador Aplicação Intraweb com Main Menu e Frames - 16/05/2005 20:37:49 SQL em tabelas com Join em Access - 24/01/2005 21:06:59 Descarregando DLL's ISAPI/ACTIVEX/INTRAWEB - 10/12/2004 22:52:37
Últimos Artigos desta categoria Alterando o Collate Default SQL Server - 06/06/2011 11:13:06 Problemas de logins e usuários no BD MSSQL 2005 - 25/01/2010 07:43:05 Como ver Service Pack, Versoes do SQL - 07/10/2009 12:10:42
1 pessoa(s) on-line neste site.