SQL Pequeña chuleta de uso del SQL 0.01 2.1.2003 primera versión 0.02 20.1.2003 DELETE 0.03 22.1.2003 SELECT con GROUP BY, UPDATE de otra tabla 0.04 22.7.2003 decimales y AS400 --CREATE TABLE-- CREATE TABLE EART00F ( ARTCIA CHAR(3), ARTART CHAR(15), ARTPUC NYMERIC(10,2), CONSTRAINT EART00F_ARTCIA_ARTART PRIMARY KEY ( ARTCIA, ARTART ) ); --CREATE INDEX-- CREATE INDEX EART00F_INDEX ON EART00F (ARTART); --CREATE VIEW-- CREATE VIEW NOMBREVISTA AS SQLSELECT; DROP VIEW NOMBREVISTA; --SELECT-- # % = shell * # _ = shell ? SELECT * FROM EART00F WHERE ARTART LIKE 'CD%' SELECT ARTART,ARTPUC,TALIMP,ARTFUA,ARTDES FROM EART00F,VTAL00F WHERE (ARTART=TALART) AND ARTFUA IS NOT NULL #Redondeo hacia arriba -FLOOR(-N) #a 0,00 o 0,05 superior 5*(-FLOOR(-N*100/5)/100) #y factor 1.20 SELECT ARTART,TALIMP,(-FLOOR(-ARTPUC*120/5)/20) AS NUEVOPVP,ARTFUA,ARTDES FROM EART00F,VTAL00F WHERE (ARTART=TALART) AND ARTCIA='CIA' AND ARTSUB='RP' AND ARTART LIKE 'SA%' SELECT OTCNOT,OTCMAT FROM TOTC00F WHERE OTCCIA='CIA' AND OTCMAT<>'' AND OTCNOT NOT IN (SELECT OTONOT FROM TOTO00F WHERE OTOCIA='CIA' AND OTOLIO=2) #Ver lo que no tiene precio compra a cero y no ha llegado nunca SELECT ARTART,ARTPUC,ARTDES FROM EART00F EXCEPTION JOIN NREC00F ON ARTART=RECART AND ARTCIA=RECCIA WHERE ARTCIA='CIA' AND ARTSUB='RP' AND ARTART LIKE 'CL%' AND ARTPUC<>0 # GROUP BY & AGREGACION #solo la primera ubicacion con existencia para cada articulo SELECT DISTINCT EXIART,MIN(EXIUB1) FROM EEXI00F WHERE EXICIA='HR2' AND EXIALM=201 AND EXIQFI>0 GROUP BY EXIART --INSERT-- INSERT INTO EART00F (ARTCIA,ARTART) VALUES ('CIA','UNO'); --UPDATE-- UPDATE EART00F SET ARTDIV='CD' WHERE ARTART LIKE 'CD%' UPDATE EART00F SET ARTPUC=0, ARTFUA=0, ARTFUM=0, ARTFUD=0 WHERE ARTCIA='CIA' UPDATE EART00F SET ARTPUC=(FLOOR(130/2)) WHERE ARTCIA='CIA' AND ARTART='EP R-250-401' # ACTUALIZAR DE OTRA TABLA (con multiples entradas) # Actualiza ubicación recomendada a primera posición real con stock UPDATE ERAM00F SET RAMUB1=( SELECT DISTINCT MIN(EXIUB1) FROM EEXI00F WHERE EXICIA='HR2' AND EXIALM=201 AND EXIQFI>0 AND EXIART=RAMART ) WHERE RAMCIA='HR2' AND RAMALM=201 AND RAMART IN ( SELECT DISTINCT EXIART FROM EEXI00F WHERE EXICIA='HR2' AND EXIALM=201 AND EXIQFI>0 ) --DELETE-- # El FROM como en un SELECT # ATENCION: verificar haciendo el SELECT antes de borrar... DELETE FROM TABLE WHERE ... FUNCIONES: FLOOR(N) (redondeo hacia abajo) existe en TODOS (Postgresql, mysql, DB2) - INT(N) no exite en Postgresql ni mysql pero si en DB2 - ROUND(N) no existe en DB2 y si en Postgresql y en mysql FUNCIONES DE AGRUPACION: - FIRST no existe en DB2 DECIMALES: - +0,999 para la DB2 del AS400 - +0.999 para Postgresql - +999/1000 no hace lo esperado en la DB2 del AS400 (hace como +0). -¿algo compatible?