Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/07/2016, 02:15
Pelydas
 
Fecha de Ingreso: abril-2010
Mensajes: 68
Antigüedad: 14 años
Puntos: 0
Crear sentencia SELECT..UNION a partir de tablas

Hola a todos

Uso SQL2008R2 y tengo 16 tablas, estas tablas tienen "casi" los mismos datos, hay diferencias en cuanto a nombre de campo para guardar el mismo dato o hay campos que estan en una y no en otras y no me interesarian. Para que se entienda bien esta cosa loca supongamos que son tablas para clientes diferentes y no se hizo una sola con un campo "codclient" para diferenciar los clientes sino una para cada cliente. Es importante que en lo que se "rediseña" la bbdd pueden crear otra tabla para otro cliente semejante a las anterioriores. Debo entonces crear una consulta que agrupe estos datos de todos los clientes. Para aclarar un poca mas las cosas pongo un código de ejemplo:

USE MyBase;
SET NOCOUNT ON;
IF EXISTS (SELECT name FROM sys.tables WHERE name = 't1')
DROP TABLE t1;
IF EXISTS (SELECT name FROM sys.tables WHERE name = 't2')
DROP TABLE t2;
IF EXISTS (SELECT name FROM sys.tables WHERE name = 't3')
DROP TABLE t3;
DECLARE @sql nvarchar(max)
CREATE TABLE t1 (c1 int,c2 int,c3 int)
insert into t1 values (1,1,1),(1,1,1)
CREATE TABLE t2 (c1 int,c11 int, c21 int,c3 int,c4 int)
insert into t2 values (2,2,2,2,2),(2,2,2,2,2)
CREATE TABLE t3 (c1 int,c2 int,c34 int)
insert into t3 values (3,3,3),(3,3,3)
/*
1.- de t1 me interesan todos los campos, para el cliente que esta en t1
no tengo datos en c4 que si los tienen t2 y t3
2.- de t2 el c1,c21,c3 y c4 (t2.c21 tiene el mismo dato que t1.c2 y t3.c2 pero son clientes diferentes)
3.- de t3 todos, (t3.c34 es el mismo dato que t1.c3 y t2.c3 pero son clientes diferentes)
Para concretar necesito el mismo dato de todos los clientes pero que están en campos con nombres diferentes.
Mi SELECT UNION ALL manual sería asi:
*/

SELECT c1,c2,c3,0 FROM t1
UNION ALL SELECT c1,c21,c3,c4 FROM t2
UNION ALL SELECT c1,c2,c34,0 FROM t3

/*me sale algo parecido si hago:...*/

SELECT @sql = COALESCE(@sql + ''+CHAR(10)+' UNION ALL ','') + 'SELECT '

-- y aqui es donde tengo el problema, la relacion de campos varía

+ 'c1,c2,c3 FROM ' + table_name
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 't[1-9]'
print @sql

¿ alguna sugerencia ?. Gracias.