08/10/2009, 23:13
|
| | | Fecha de Ingreso: diciembre-2001 Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 11 meses Puntos: 7 | |
Respuesta: cruse de tres tablas Te he entendido y debes normalizar tus datos.
Por fortuna tu problema tiene una solución simple a partir de SQL Server 2005.
Como no tengo una muestra de tus datos me he inventado una con tu estructura para poder mostrar una solución con la cual podrias proceder.
Código:
--Contrucción de datos de prueba
DECLARE @tblsucursales TABLE(
idsucursal INT NOT NULL,
nombre VARCHAR(30) NOT NULL,
ciudad VARCHAR(30) NOT NULL
)
DECLARE @tblcupones TABLE(
idcupon INT NOT NULL,
idcomercio INT NOT NULL,
sucursales VARCHAR(200),
estado TINYINT NOT NULL
)
INSERT INTO @tblsucursales
SELECT 1 AS idsucursal,
'MEX005' AS nombre,
'México' AS ciudad UNION ALL
SELECT 2, 'MEX006', 'México' UNION ALL
SELECT 3, 'MEX007', 'México' UNION ALL
SELECT 4, 'MEX008', 'México' UNION ALL
SELECT 5, 'GDL001', 'Guadalajara' UNION ALL
SELECT 6, 'GDL002', 'Guadalajara' UNION ALL
SELECT 7, 'GDL003', 'Guadalajara' UNION ALL
SELECT 8, 'GDL004', 'Guadalajara' UNION ALL
SELECT 9, 'GDL005', 'Guadalajara' UNION ALL
SELECT 10, 'MTY001', 'Monterrey' UNION ALL
SELECT 11, 'MTY001', 'Monterrey' UNION ALL
SELECT 12, 'MTY001', 'Monterrey' UNION ALL
SELECT 13, 'MTY001', 'Monterrey' UNION ALL
SELECT 14, 'MTY001', 'Monterrey' UNION ALL
SELECT 15, 'MTY001', 'Monterrey' UNION ALL
SELECT 16, 'MTY001', 'Monterrey'
INSERT INTO @tblcupones
SELECT 1 AS idcupon,
500 AS idcomercio,
'2,3' AS sucursales,
0 AS estado UNION ALL
SELECT 2, 5001, '1,4', 0 UNION ALL
SELECT 3, 5001, '5,6,9,', 1 UNION ALL
SELECT 4, 5001, '11,13,15', 1
--Consulta
SELECT tc.idcupon,
ids.idsucursal,
ts.nombre,
ts.ciudad
FROM (
SELECT idcupon,
CAST('<x>' + REPLACE(sucursales, ',', '</x><x>') + '</x>' AS XML) AS x
FROM @tblcupones AS a
WHERE estado = 1
) AS tc
CROSS APPLY (
SELECT sucursal.id.value('.', 'INT') AS idsucursal
FROM tc.x.nodes('/x') AS sucursal(id)
) AS ids
INNER JOIN @tblsucursales AS ts
ON ids.idsucursal = ts.idsucursal
Saludos. |