🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #12067

Re: Transform en SQL

#12067
From: Xavier Montero
Date: Sun, 02 Sep 2001 16:48
83 lines
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-mail
References: <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