P. 1
Qué son las referencias cruzadas

Qué son las referencias cruzadas

|Views: 429|Likes:
Publicado porHernan Pineda

More info:

Published by: Hernan Pineda on Apr 07, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOC, PDF, TXT or read online from Scribd
See more
See less

04/12/2014

pdf

text

original

Qué son las referencias cruzadas, cómo se construyen y para qué se utilizan.

Por Claudio
Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.

Una consulta de referencias cruzadas es aquella que nos permite visualizar los datos en filas y en columnas, estilo tabla, por ejemplo:

Producto / Año 1996 1997 Pantalones Camisas Zapatos 1.250 3.000 8.560 1.253 4.369 2.563

Si tenemos una tabla de productos y otra tabla de pedidos, podemos visualizar en total de productos pedidos por año para un artículo determinado, tal y como se visualiza en la tabla anterior. La sintaxis para este tipo de consulta es la siguiente:

TRANSFORM función agregada instrucción select PIVOT campo pivot [IN (valor1[, valor2[, ...]])]

En donde:

función agregada instrucción select campo pivot valor1, valor2 Son valores fijos utilizados para crear las cabeceras de la columna.

Es una función SQL agregada que opera sobre los datos seleccionados. Es una instrucción SELECT. Es el campo o expresión que desea utilizar para crear las cabeceras de la columna en el resultado de la consulta.

Para resumir datos utilizando una consulta de referencia cruzada, se seleccionan los valores de los campos o expresiones especificadas como cabeceras de columnas de tal forma que pueden verse los datos en un formato más compacto que con una consulta de selección. TRANSFORM es opcional pero si se incluye es la primera instrucción de una cadena SQL. Precede a la instrucción SELECT que especifica los campos utilizados como encabezados de fila y una

para los que no existen datos. valor2) listados en la cláusula opcional IN. Fecha) (Crea una consulta de tabla de referencias cruzadas que muestra las ventas de productos por mes para un año específico. Cantidad FROM Pedidos WHERE Fecha Between #01-01-1998# And #12-31-1998# GROUP BY Producto ORDER BY Producto PIVOT DatePart("m". al utilizar las cifras de ventas en el mes de la venta como pivot en una consulta de referencia cruzada se crearían 12 columnas. Por ejemplo. para crear columnas adicionales. Ejemplos TRANSFORM Sum(Cantidad) AS Ventas SELECT Producto. que especifica una selección adicional o un criterio de ordenación. Opcionalmente puede incluir otras cláusulas como por ejemplo WHERE. Puede restringir el campo pivot para crear encabezados a partir de los valores fijos (valor1. Los meses aparecen de izquierda a derecha como columnas y los nombres de los productos aparecen de arriba hacia abajo como filas.) TRANSFORM Sum(Cantidad) AS Ventas SELECT Compania FROM .cláusula GROUP BY que especifica el agrupamiento de las filas. También puede incluir valores fijos. Los valores devueltos en campo pivot se utilizan como encabezados de columna en el resultado de la consulta.

la fecha del pedido y la cantidad pedida. tenemos otra tabla de pedidos en la que anotamos el código del producto. 'Trimestre 3'. Fecha) In ('Trimestre1'. 'Trimestre 4') (Crea una consulta de tabla de referencias cruzadas que muestra las ventas de productos por trimestre de cada proveedor en el año indicado. 'Trimestre2'.) Un caso práctico: Se trata de resolver el siguiente problema: tenemos una tabla de productos con dos campos.Pedidos WHERE Fecha Between #01-01-1998# And #12-31-1998# GROUP BY Compania ORDER BY Compania PIVOT "Trimestre " & DatePart("q". Los trimestres aparecen de izquierda a derecha como columnas y los nombres de los proveedores aparecen de arriba hacia abajo como filas. el código y el nombre del producto. calculando la media anual de ventas. Deseamos consultar los totales de producto por año. Estructura y datos de las tablas: Para resolver la consulta planteamos la siguiente consulta: .

otros para los títulos de la columna y otro para calcular el valor de las celdas. uno para los títulos de la fila. Código. Sum(Pedidos. esta tabla debe contener al menos tres campos. en este caso Producto.TRANSFORM Sum(Pedidos. Artículos WHERE Pedidos.Cantidad) AS TOTAL. Si incluimos una función de cálculo el resultado se hará basándose en los datos de la fila actual y no al total de los datos. puesto que las demás columnas son opcionales.Id. Total y Media. FROM especifica el origen de los datos. indicando el nombre del campo que deseamos mostrar en cada columna o el valor de la misma.Id = Artículos. en este caso 1996 y 1997. Artículos. La primera tabla que debe figurar es aquella de donde deseamos extraer los datos.75 375 620 1320 Comentarios a la consulta: La cláusula TRANSFORM indica el valor que deseamos visualizar en las columnas que realmente pertenecen a la consulta. Pedidos.Id AS Código.Nombre PIVOT Year(Fecha) Y obtenemos el siguiente resultado: Producto Código Total Media 1996 1997 Zapatos Pantalones Blusas 1 2 3 348 1940 87 485 300 48 580 955 238. SELECT especifica el nombre de las columnas opcionales que deseamos visualizar. . Avg(Pedidos.Cantidad) AS Media FROM Pedidos.Cantidad) AS Resultado SELECT Nombre AS Producto.Id GROUP BY Pedidos.

2. La cláusula GROUP BY especifica el agrupamiento de los registros.cantidad y artículos. "Jun". extrayéndolo del campo pedidos. "Mar". en este caso 1996 y 1997 y como vamos a el dato que aparecerá en las columnas.En este caso en concreto se deseaba visualizar el nombre del producto. "Ago". 3. en este caso empleamos el año en que se produjo el pedido. "Dic"). contrariamente a los manuales de instrucción esta cláusula no es opcional ya que debe figurar siempre y debemos agrupar los registros por el campo del cual extraemos la información."mmm") In ("Ene". "Feb". "May". "Jul". "Oct"."Short Date"). por ello agrupamos por los campos. Para agrupamiento por meses (sin tener en cuenta el año) PIVOT Format([Fecha]. Para agrupar por días PIVOT Format([Fecha]. como en la tabla de pedidos sólo figuraba el código del mismo se añadió una nueva columna en la cláusula select llamada Producto que se corresponda con el campo Nombre de la tabla de artículos. Para agrupamiento por Trimestres: PIVOT "Tri " & DatePart("q". En este caso existen dos campos de los que extraemos la información: pedidos. . Otras posibilidades de fecha de la cláusula pivot son las siguientes: 1.fecha.nombre.[Fecha]). "Abr". Para finalizar la cláusula PIVOT indica el nombre de las columnas no opcionales. "Sep". "Nov". Para vincular el código del artículo de la tabla de pedidos con el nombre del mismo de la tabla artículos se insertó la cláusula INNER JOIN.

Un ejemplo del uso UNPIVOT (Transformación de las columnas en filas) Artículos escritos por mí anteriormente. Los desarrolladores que siguen utilizando SQL Server 2000.Ejemplo de consulta PIVOT Tab UNPIVOT Cruz en diferentes versiones de SQL Server 01 de octubre 2008 por el pinaldave La transformación de las filas en las columnas (PIVOT / CRUZ TAB) y las columnas a las filas (UNPIVOT) puede ser uno de los requisitos comunes que todos nosotros debemos haber visto varias veces en nuestra vida de programación.com ) UNPIVOT Tabla tabla dinámica Compartir: • • • • • • • • • • . SQL Server 2005 introdujo dos nuevos operadores: PIVOT y UNPIVOT que hizo por escrito la ficha consultas entre más fácil.SQLAuthority.La generación de resultados entre distintas tabs en SQL Server 2000 TSQL Laboratorio 17 . No existe en SQL Server 2000. SQL SERVER Ejemplos PIVOT y SQL SERVER Ejemplo de SQL SERVER . Mi amigo y SQL Server MVP Jacob Sebastian ha publicado un ejemplo que transformar filas de columnas con operador PIVOT. debe actualizar a SQL Server 2005 o SQL Server 2008 (recomendado). TSQL Laboratorio 15 Otro Ejemplo de consulta PIVOT TSQL Laboratorio 16 . Operador PIVOT sólo está disponible en SQL Server 2005/2008.SQL SERVER .Ejemplo UNPIVOT Tabla Referencia: Pinal Dave ( http://blog. La operación inversa de PIVOT es UNPIVOT. Si bien la discusión de este tema con Jacob otro día escribió los mensajes después de tan rápido que era muy impresionante.

consultas SQL . SQL . otra mesa de la tienda idno. ItemName. itemvalue. party3. Parte1. PARTIDO2.• • De esta manera: Como Sé el primero en gusto de este poste. TAX2. SQL Autoridad . si cualquier solución por favor dígame. SQL T . SQL Consejos y trucos . Tecnología | Etiquetado MVP . el 24 de septiembre 2010 a las 6:41 pm | Responder Dinesh mi problema es el siguiente: 1 mesa de la tienda idno. itemamount. Publicado en Pinal de Dave . PIVOT . Tax1. SQL Server . UNPIVOT | 12 Comentarios 12 Respuestas 1. así como de resultados se espera que le ayude . Dinesh o el 24 de septiembre 2010 a las 8:49 pm | Responder Madhivanan Es necesario publicar algunos datos. Fui a ver como esta Parte1 PARTIDO2 party3 ItemName 200 210 220 Tax1 10 11 12 TAX2 1 3 4 pero trato de no hacerlo liks esto.

5 Prueba de sangre 2.5mg/dl mg / dl 4. Mientras la primera prueba se realiza en 21/09/2011 y 25/09/2011 en la segunda.InvstName PIVOT (dtInvestigation . ================================================== ====== *** Ahora quiero los datos de este tipo *** -----------------------------Prueba Nombre 21/09/2011 25/09/2011 -----------------------------Prueba de sangre 1.InvDate Cuando no es nulo y Patid = 1 GROUP BY mstInvestigation.0-2.0-2.5 mg mg 1.InvstId dtInvestigation.0 mg mg 1. Si bien había utilice esta consulta en VB.InvstName FirstOfInvId SELECT dtInvestigation INNER JOIN mstInvestigation EN dtInvestigation. que se ejecuta correctamente.Net acceso de codificación directa.5 mg 2. InvDate) como el soldado.0-15.5 Prueba en orina 7. donde se puede seleccionar la fecha: -----------------------------Investigación Fecha 21/09/2011 -----------------------------Resultados de prueba Nombre Unidad Rango Comentarios -----------------------------Prueba de sangre 1.5 -----------------------------Véase más arriba Análisis de sangre 2 se insertan.o el 23 de septiembre 2011 a las 2:11 pm | Responder Uttekar Amit Tengo este tipo de datos: Aquí Fecha de Investigación es combo-box. ================================================== ====== Acceso de consulta: TRANSFORMAR En primer lugar (dtInvestigation.InvId = mstInvestigation.InvValue & '' & InvUnit) COMO mstInvestigation. Y prueba de orina que se hace en el 25/09/2011.0 mg .

00 3.00 3. cantidad 2.Prueba en orina 7.00 y etc . Apellido varchar (50).. pero quiero tener una base de datos en el siguiente formato . Medical_record_number varchar (20).00 y así sucesivamente . Amit Uttekar [Correo electrónico eliminado] 2.00 y así sucesivamente ... Date_of_birth fecha y hora.5mg/dl -----------------------------Por favor. cantidad 2.. que sea rápido y me envían la respuesta a la brevedad posible Usted me puede responder aquí: .3. por favor me ayude en esto pronto .. tiene una cantidad de datos... en el que una columna llamada cantidad existe .. la cantidad de selección del datamart me muestra un conjunto de datos como .[correo electrónico eliminado] Un cordial saludo. el 23 de noviembre 2010 a las 9:39 am | Responder Richie Lawren Problema de SQL Supongamos que hemos cargado un archivo plano con los datos de diagnóstico del paciente en una tabla llamada "Datos". . el 01 de octubre 2010 a las 11:01 am | Responder Amisha parekh Tengo una tabla llamada datamart .. La estructura de la tabla es la siguiente: Crear datos de tabla ( Apellido varchar (50).. tales como 2.. Amisha 3.00.. es decir..... Cuando selecciono una consulta de datos a través .

'3 / 3/2009'.' NRM-22222 '. 'asma' 'Jane'. Este problema tiene muchas soluciones. 'la diabetes' 'Tom'.' NRM-33333 '.' NRM-11111 '. 'asma' 'Jack'. '3 / 3/2009'. y fecha de la combinación de nacimiento. 4. '1 / 3/2009'. '8 10 / / 1991 '. la 'gripe' 'Tom'. 'Smith'. '2 2 / / 2001 '. 'Jones'.' NRM-11111 '. '2 2 / / 2001 '. '4 / 12/2002 '. debe ser capaz de encontrar uno que utiliza una sola consulta. '2 17 / / 2009'.Diagnosis_date fecha y hora. el 13 de septiembre 2011 a las 3:45 pm | Responder Dhanashree QUIERO para mostrar el informe en nombre de la misma columna (repetición) y los campos de diffrent son de pantalla en la columna diffrent mediante el uso de pivote. '3 7 / / 2009'. el 31 de marzo 2011 a las 3:19 pm | Responder Manjunatha Estoy amable Requeistng por favor a ti te cómo me pueden insertar diferentes campos en diferentes tablas de una forma 5. '5 / 5/1975 '. '4 / 12/2002 '. 'Jones'. '4 / 12/2002 '. ¿QUÉ PUEDO HACER? . El problema es el siguiente: Tom Smith tiene 2 números diferentes de historias clínicas. 'Smith'. 'asma' 'Tom'.' NRM-33333 '. 'Thomas'. Diagnosis_code varchar (20)) Los datos del archivo plano se parece a esto: 'Jane'.' NRM-88888 '. pero si usted sabe de SQL. Escriba una consulta que siempre se muestran todos los pacientes que son como Tom Smith en los pacientes con más de un número de historia clínica.' NRM-44444 '. '1 / 3/2009'. 'asma' Se puede asumir que no hay dos pacientes tienen el primer nombre mismo apellido. sin subconsultas. 'Smith'. '2 / 7/2009'. 'la diabetes' 'Jane'. 'Jones'.

VCH_YEAR).VCH_UNIT. DTM_PLAN_APPROVAL) GetTable PIVOT (Max (DTM_PLAN_APPROVAL) POR CANTIDAD EN (¿Puedo escribir la declaración theselect aquí. el 13 de enero 2012 a las 9:20 pm | Responder Malcolm Hola y gracias por toda la gran información! Tengo un escenario que necesito ayuda y espero que usted me puede ayudar. EMP NOMBRE | NOMBRE STAT | STAT | SEMANA "JACK" | "número de visitas" | 12 | 1 "JACK" | "número de visitas" | 22 | 2 "Susan" | "Número de llamadas manejadas" | 125 | 1 "Susan" | "Número de llamadas manejadas" | 105 | 2 Mi problema es que tengo que devolver una sola fila para cada uno "Nombre de estadísticas" por cada empleado para que mi conjunto de datos se vería así. T T_MIS_MININGPLAN_ML DONDE M.NUM_QUANTITY) + T. CONVERT (VARCHAR.NUM_QUANTITY) T. .VCH_UNIT + AS cantidad.INT_CIRCLE_ID = 7 y T.INT_MP_ID Y M. CONVERT (VARCHAR..BIT_DELETED_FLAG = 0 Y = 0 y T. T.INT_MP_ID = T.BIT_DELETED_FLAG m. Tengo una tabla que tiene este aspecto.INT_MINERAL_ID = 13 Y = 271 M.6. 7.)) AS RIII 8. el 28 de diciembre 2011 a las 24:58 | Responder Madhu select * from (SELECT DISTINCT (T. el 28 de diciembre 2011 a las 24:56 | Responder Madhu ¿dónde está la solución de los querys anteriores . CONVERT (VARCHAR. M.INT_LESSEE_ID GROUP BY VCH_YEAR. T.DTM_PLAN_APPROVAL. 106) AS DE DTM_PLAN_APPROVAL M_MIS_MININGPLAN_ML M.

[StartTime] [varchar] (50) NULL. [EndTime] [varchar] (50) NULL. 1 17:00 17:00 17:00 17:00 17:00 17:00 17:00 ====================================== Mi tabla de este modo CREATE TABLE [dbo].1) NULL. ¿Alguna sugerencia? Gracias por adelantado! 9. STATISTICS_NORECOMPUTE = OFF. [WeekID] [int] NULL. ALLOW_ROW_LOCKS = ON. el 27 de enero 2012 a las 7:56 pm | Responder Bhavik Tengo una consulta a Quiero Dispaly salida Ponga como como AgentID | Lun | Mar | Mie | jue | vie | SAT | dom. [CRMScheduleMaster] ( [Scheduled] NO [int] IDENTIDAD (1. Mu \ y Id es: [correo electrónico eliminado] . IGNORE_DUP_KEY = OFF. [AgentID] [int] NOT NULL. ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] ================ Así que por favor dar la solución. CONSTRAINT [PK_ScheduleMaster] PRIMARY KEY CLUSTERED ( [Scheduled] ASC ) CON (PAD_INDEX = OFF.EMP NOMBRE | NOMBRE STAT | Semana 1 | PARTE 2 "JACK" | "número de visitas" | 12 | 22 "Susan" | "Número de llamadas manejadas" | 125 | 105 Estoy un poco perdido en lo que lo que hay que hacer es conseguir que este tipo de resultado.

.00 2801 2 26/01/2012 08.. sno rhr_s Fecha Hora 1 26/01/2012 07.00 2804 .00 2804 tb1 datatype autogeneración sno.. aquí está la scnerio. el tiempo varchar (10). el tiempo varchar (10).00 2802 3 26/01/2012 09..00 2803 1 27/01/2012 10. fecha varchar (16).00 2801 1 26/01/2012 08.10. rhrs int. el 05 de marzo 2012 a las 3:46 pm | Responder Mahajan Sudhanshu i reallly quiere su ayuda en una consulta haciendo el tabulación cruzada . tuberculosis datatype autogeneración sno.. fecha varchar (16). sno rhr_s Fecha Hora 1 26/01/2012 07. int rhr_s1. hay muchas mesas.00 2802 1 27/01/2012 09.00 2803 4 26/01/2012 10. plzzz me ayude .

00 2812 3 27/01/2012 09. int rhr_s2.28/01/2012 ** \ \ \ \ rhr_s-(máximos y mínimos en la fecha = 26/01/2012) (máximos y mínimos que date = 27/01/2012) (misma fórmula) \ \ \ \ rhr_s1 como anteriormente como anteriormente como anteriormente \ . sno de fecha y hora rhr_s2 1 26/01/2012 07.00 2811 6 27/01/2012 08.00 2813 8 28/01/2012 10.00 2811 2 26/01/2012 08. fecha varchar (16). el tiempo varchar (10).5 27/01/2012 07.00 2812 7 28/01/2012 09.00 2814 TB2 datatype autogeneración sno.00 2814 quiero una ficha crross de esta manera en el formato de fecha al azar sin fecha fija ** Cols -----26/01/2012----------27/01/2012 -----.00 2813 4 27/01/2012 10.

..\ \ \ rhr_s2 como anteriormente como anteriormente como anteriormente por favor me ayude en la toma de este tipo de informe .. i i reallly problemas ..

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->