Tengo dos consultas, la primera devuelve el código y el último precio

SELECT s.art_code AS CODE
    ,max(s.DocD_PUHTB) AS PRIX
    ,max(s.Docd_date) AS DATE
FROM documentd s
INNER JOIN (
    SELECT s2.art_code
        ,MAX(s2.Docd_date) AS MaxDate
    FROM documentd s2
    GROUP BY s2.art_code
    ) md ON s.art_code = md.art_code
    AND s.Docd_date = md.MaxDate
    AND s.doc_num LIKE '%bla%'
WHERE s.docd_date >= '2019-01-01'
GROUP BY s.art_code
ORDER BY s.Art_Code

enter image description here

La segunda consulta actualiza otra tabla con el resultado de la primera

UPDATE art
SET art_pv = (
        CASE 
            WHEN art_code = '000022215163'
                THEN 3.608
            WHEN art_code = '0013123'
                THEN 5.932
            WHEN art_code = '082005'
                THEN 2.929
            WHEN art_code = '10001862'
                THEN 0.663
            END
        )

Mi pregunta es cómo la segunda consulta (Consulta de actualización) toma el resultado "código" y "precio" de la primera consulta (Seleccionar consulta) dinámicamente y ¿lo hace automáticamente cada hora?

0
MOHAMED NEJI 13 feb. 2020 a las 17:36

2 respuestas

La mejor respuesta

He seguido el enlace a su rextester, y las columnas y los datos no coinciden. Hice un SQLFiddle para probar.

creo te refieres a lo siguiente:

update art
set art_pv =  n.prix
from art a, 
(SELECT s.art_code AS art_code
    ,max(s.DocD_PUHTB) AS PRIX
    ,max(s.Docd_date) AS DATE
FROM documentd s
INNER JOIN (
    SELECT s2.art_code as art_code
        ,MAX(s2.Docd_date) AS MaxDate
    FROM documentd s2
    GROUP BY s2.art_code
    ) md ON s.art_code = md.art_code
    AND s.Docd_date = md.MaxDate
    AND s.doc_num LIKE '%bla%'
WHERE s.docd_date >= '2019-01-01'
GROUP BY s.art_code) n
where n.art_code = a.art_code;

Para ejecutar esta consulta en un horario, puede crear un trabajo en el Agente SQL Server.

0
Neville Kuyt 26 feb. 2020 a las 06:59

Para la pregunta uno:

Usa esta consulta ==>

SELECT s.art_code as CODE, max(s.DocD_PUHTB)as PRIX, max(s.Docd_date) as DATE
FROM documentd s 
Where s.doc_num like '%bla%' and s.docd_date >= '2019-01-01'
GROUP BY s.art_code

Para la pregunta dos:

Insertar en # t1 y usar con:

SELECT s.art_code as CODE, max(s.DocD_PUHTB)as PRIX, max(s.Docd_date) as DATE ,CASE 
        WHEN art_code = '000022215163'
            THEN 3.608
        WHEN art_code = '0013123'
            THEN 5.932
        WHEN art_code = '082005'
            THEN 2.929
        WHEN art_code = '10001862'
            THEN 0.663
        END
    ) as NewCol
Into #t1
FROM documentd s 
Where s.doc_num like '%bla%'
GROUP BY s.art_code

Update documentd 
Set art_pv = #t1.NewCol
From #t1
0
Amirhossein 25 feb. 2020 a las 12:13