Article View: es.comp.os.linux.programacion
Article #12067Re: Transform en SQL
From: Xavier Montero
Date: Sun, 02 Sep 2001 16:48
Date: Sun, 02 Sep 2001 16:48
83 lines
4613 bytes
4613 bytes
> > TRANSFORM Max([MiTabla].Value) AS [El Valor] SELECT
> > [MiTabla].ID FROM [MiTabla] GROUP BY [MiTabla].ID
> > PIVOT [MiTabla].Property
> �Qu� hace exactamente la orden?
Sup�n una tabla as�:
MiTabla:
----------------+-----------------+------------------+
ID |Property |Value |
----------------+-----------------+------------------+
Elemento1 Color Blanco
Elemento1 Material Madera
Elemento1 Fecha_de_Entrada 23 ago 2001
Elemento2 Color Rojo
Elemento3 Color Rojo
Elemento3 Fecha_de_Entrada 25 ago 2001
Elemento3 Prestado_a Antonio
El Select presentado convierte filas a columnas de forma din�mica
y tiene un resultado as�:
ID | Color | Material | Fecha | Prestado_a
-------------------------------------------------------------
Elemento1 | Blanco | Madera | 23 ago 2001 |
Elemento2 | Rojo | | |
Elemento3 | Rojo | | 25 ago 2001 | Antonio
Esto permite fichar cosas de las que a priori en el momento
del dise�o del software no se conocen las propiedades a fichar.
Dicho de otra forma, es como php con los miembros de las
clases, que son como din�micos, cosa que no se podr�a
hacer en C por la necesidad de definir la clase antes de
compilar. Ficharlo no es lo dif�cil, luego las consultas
se simplifican un mont�n. Llamemos V a la vista transformada.
Hacer
SELECT * FROM V WHERE Color='Rojo' AND Prestado_a='Antonio'
no es inmediato (aunque a priori lo parezca) en la primera tabla,
porque nuestra intuici�n nos enga�a:
TEndemos a pensar que Color='Rojo' en V es como
Property='Color' AND Value='Rojo' en la primera tabla pero...
SELECT * FROM MiTabla WHERE (Property='Color' AND Value='Rojo')
AND (Property='Prestado_a' ADN Value='Antonio') no dar�
ning�n registro como resultado porque no hay ninguna l�nea
en la primera tabla que _a la vez_ tenga Property='Color'
y Property='Prestado_a' lo que da falso el where all� donde
se analice.
De esta forma, el usuario, con s�lo a�adir una l�nea en
la tabla original, del tipo
("Elemento2", "Origen", "Inglaterra")
fuerza que la siguiente vez que se lee la cl�usula transform
�sta devuelva una columna adicional llamada "Origen" con
valores vac�os para todos los elementos salvo para
el Elemento 2 que tendr� un valor de "Inglaterra" y
las formas de buscar elementos desde c�digo ser�n inmediatas
sin necesidad de a�adir c�digo adicional para b�squedas
complejas.
Es flexibilidad no la he sabido encontrar en MySQL ni
Postgress excepto si mi programa hace uso de las cl�usulas
ALTER TABLE xxx ADD COLUMN kk ttt; o alguna cosa por el
estilo, pero me gusta m�s el transform por la automatizaci�n
(y por tanto ahorro de c�gigo potencialmente lleno de
bugs).
Sobre si es ANSI o no, me suena que s�, pero no estoy seguro,
y me gustar�a saber si alguien sabe si se puede "confiar" en
desarrollar clientes basados en esa cl�usula si se persigue
que las bases contra las que se act�a actualmente se puedan
substituir en el menor tiempo posible por servers con
Linux y alguna base del tipo PG o My.
Gracias.
Xavi.
--
Xavier Montero - Digital Sound Items, scp
Tel: 93 589 71 91 - Fax: 93 590 10 96 - Cell: 630 59 01 62
www.dsitelecom.com - xmontero@dsitelecom.com
Technical Details
Message-ID:
<3B9262C7.341C8517@dsitelecom.com>Path:
arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed.icl.net!news.tele.dk!small.news.tele.dk!193.251.151.101!opentransit.net!newsfeed.comtenidos.com!newsfeeder.wanadoo.es!news.antakira.com!not-for-mailReferences:
<3B921D9B.BB883904@dsitelecom.com> <slrn9p4n4j.c6.david@lorien.net>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: f86c8,16d9657e1a201eb4 X-Google-Attributes: gidf86c8,public X-Google-ArrivalTime: 2001-09-02 10:06:04 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed.icl.net!news.tele.dk!small.news.tele.dk!193.251.151.101!opentransit.net!newsfeed.comtenidos.com!newsfeeder.wanadoo.es!news.antakira.com!not-for-mail From: Xavier Montero <xmontero@dsitelecom.com> Newsgroups: es.comp.os.linux.programacion Subject: Re: Transform en SQL Date: Sun, 02 Sep 2001 18:48:07 +0200 Organization: Digital Sound Items Lines: 83 Message-ID: <3B9262C7.341C8517@dsitelecom.com> References: <3B921D9B.BB883904@dsitelecom.com> <slrn9p4n4j.c6.david@lorien.net> NNTP-Posting-Host: 212.25.147.135 Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Trace: news.wanadoo.es 999450147 21542 212.25.147.135 (2 Sep 2001 17:02:27 GMT) X-Complaints-To: usenet@wanadoo.es NNTP-Posting-Date: Sun, 2 Sep 2001 17:02:27 +0000 (UTC) X-Mailer: Mozilla 4.77 [en] (Windows NT 5.0; U) X-Accept-Language: en