Buenas compañeros, tengo un pequeño lío, necesito sacar una consulta de unas tablas y yo en SQL no soy muy bueno sobre todo con los JOIN, requiero de su ayuda, les voy a tratar de plantear todo de una manera práctica y les muestro la consulta básica que yo usaba y que traté de adaptar:
Tengo 4 tablas:
BHD (Ventas)
presupuesto (Presupuesto por cliente mensual)
DRM (Clientes)
BSD (Detalle Ventas)
Que necesito? necesito toda la tabla de presupuesto con todas las ventas, con la consulta que tengo ahora mismo me muestra o las ventas que tienen presupuesto o los presupuestos que tienen ventas... la idea es en un excel luego organizar por trimestre y montón de cosas más q pidió el patrón
Estos son los datos que necesito que salgan:
El año de un campo que se llama TRAVELDATE (fecha de viaje) de la tabla BHD, el nombre del mes de presupuesto, el trimestre de presupuesto, el nombre del cliente de DRM, un campo RETAIL que es el valor de la venta (total) en la tabla BSD, el valor del presupuesto.
Así se relacionan las tablas:
BHD con DRM por el codigo del cliente (AGENT y CODE respectivamente)
presupuesto con DRM por el codigo del cliente (CODE y CODE)
BHD con presupuesto lo cruzo por el año y por el mes
BHD con BSD lo cruzo por un consecutivo que hay entre las dos tablas (BHD_ID)
Las condiciones:
Que sea solo el año 2016 (igual en el presupuesto solo hay valores del 2016)
que el estatus de la venta esté dentro de un filtro (BHD.STATUS in ('OK','OP','ON','XC'))
Que en BSL para ese BHD_ID otro consecutivo el BSL_ID sea 0 (esto lo identifica como el encabezado pues solo hay una tabla para encabezado y detalle y el encabezado con la suma de la venta lo identifica con este BSL_ID en cero, el detalle tiene un consecutivo y es cada item de la "factura")
La tabla más importante es la de presupuesto, de ahi debe partir el filtro y luego mostrar los demás registros, en ese orden de ideas mostrar todo el presupuesto con todas las ventas para esos clientes que tienen presuesto, abajo un ejemplo de esta tabla:
1 CLAV01 2016 1 Enero 1 258.0000
2 ELLVOY 2016 1 Enero 1 258.0000
3 HIATUS 2016 1 Enero 1 2000.0000
4 TRAXPE 2016 1 Enero 1 560.0000
5 1STCLA 2016 1 Enero 1 12000.0000
6 ABEKEN 2016 1 Enero 1 11330.0000
7 ADVENT 2016 1 Enero 1 3535.0000
8 ALEROB 2016 1 Enero 1 6412.0000
9 AVANTI 2016 1 Enero 1 2848.0000
10 GOWAY 2016 1 Enero 1 7815.0000
11 LATOUR 2016 1 Enero 1 4200.0000
12 JUMBO 2016 1 Enero 1 5130.0000
13 LLATRA 2016 1 Enero 1 3000.0000
14 VELOSO 2016 1 Enero 1 14749.0000
15 MTARGE 2016 1 Enero 1 500.0000
16 INTERP 2016 1 Enero 1 4000.0000
17 MATUET 2016 1 Enero 1 6000.0000
18 POMPTU 2016 1 Enero 1 2000.0000
19 PRIMET 2016 1 Enero 1 300.0000
20 SELECT 2016 1 Enero 1 3000.0000
21 VISUAL 2016 1 Enero 1 1000.0000
22 INTERM 2016 1 Enero 1 1000.0000
23 GRBR01 2016 1 Enero 1 2800.0000
24 DONATO 2016 1 Enero 1 2388.0000
25 MITURV 2016 1 Enero 1 2800.0000
26 JETOUR 2016 1 Enero 1 7000.0000
27 NOBLEC 2016 1 Enero 1 8000.0000
28 ALTOUR 2016 2 Febrero 1 2190.0000
29 CLAV01 2016 2 Febrero 1 2619.0000
30 CLAV02 2016 2 Febrero 1 300.0000
31 CLAT02 2016 2 Febrero 1 200.0000
32 CLAV03 2016 2 Febrero 1 500.0000
33 CLAV04 2016 2 Febrero 1 200.0000
34 CLAV05 2016 2 Febrero 1 100.0000
35 CLAT05 2016 2 Febrero 1 300.0000
el primer campo es un id sin importancia, el segundo es el codigo del cliente (CODE) el tercero el año, el cuarto el mes y el quinto el mes en nombre (esto es para organizarlo en excel luego por trimestre y para el eso el sexto campo igual, el último campo es el valor presupuestado para ese cliente para ese mes. Anexo la consulta que tengo diseñada ahora y les agradezco mucho si me pueden ayudar:
select YEAR(B.TRAVELDATE) as periodo, P.nom_mes as Mes, P.trimestre as Trimestre, D.NAME as Cliente,
BS.RETAIL as Venta, P.valor as Presupuesto
from presupuesto P, BHD B, BSD BS, DRM D
WHERE P.ano = '2016' AND B.STATUS IN ('OK','OP','ON','XC') AND
BS.BSL_ID = 0 AND
P.code = B.AGENT AND
B.BHD_ID = BS.BHD_ID AND
P.CODE = D.CODE AND
P.ANO = YEAR(B.TRAVELDATE) and
p.mes = DATEPART(MONTH,b.traveldate)