简体   繁体   中英

Condition if sql

I have this query

SELECT 
    SI_Num_Inventario = COALESCE (t.SI_Num_Inventario, c.SI_Num_Inventario),
    SI_Ubicacion = COALESCE(t.SI_Ubicacion, c.SI_Ubicacion),
    SI_Ubicacion_Fisica = COALESCE(t.SI_Ubicacion_Fisica, c.SI_Ubicacion_Fisica),
    SI_Num_Articulo = COALESCE(t.SI_Articulo, c.SI_Num_Articulo),
    NULL,
    SI_Num_Conteo = COALESCE(cs.SI_Num_Conteo,2),
    GETDATE(),
    'Admin',
    c.SI_OV 
FROM 
    SI_Inventario_Teorico_QAD t
FULL JOIN 
    SI_Conteo c ON t.SI_Articulo = c.SI_Num_Articulo
                AND t.SI_Ubicacion = c.SI_Ubicacion 
INNER JOIN 
    SI_Maestro_Ref_QAD m ON t.SI_Articulo = m.SI_Num_Articulo
                         OR c.SI_Num_Articulo = m.SI_Num_Articulo
FULL JOIN 
    SI_Consecutivo cs ON c.SI_Num_Inventario = cs.SI_Num_Inventario
                      AND cs.SI_Estado = 0
WHERE 
    c.SI_Num_Articulo = 201423 OR t.SI_Articulo = 201423

And I'm trying to tell you that if c.SI_OV IS NULL INSERT THIS `INSERT INTO``

IF c.SI_OV IS NULL
    INSERT INTO SI_Conteo(SI_Num_Inventario, SI_Ubicacion,SI_Num_Articulo, SI_Cantidad,SI_Num_Conteo,SI_Fecha_Conteo, SI_Usuario,SI_OV)

And if it is not NULL insert me this other

ELSE
    INSERT INTO SI_Conteo(SI_Num_Inventario, SI_Ubicacion_Fisica, SI_Num_Articulo, SI_Cantidad,SI_Num_Conteo,SI_Fecha_Conteo, SI_Usuario,SI_OV)
END IF;

如果使用非查询语言,则为其他情况〜=在SQL中cond1 ELSE cond2 END的情况

Use the below query:

INSERT INTO SI_Conteo(SI_Num_Inventario,SI_Ubicacion,SI_Ubicacion_Fisica,SI_Num_Articulo, SI_Cantidad,SI_Num_Conteo,SI_Fecha_Conteo,
SI_Usuario,SI_OV)
SELECT 
SI_Num_Inventario = COALESCE (t.SI_Num_Inventario,c.SI_Num_Inventario),
(CASE WHEN c.SI_OV IS NULL THEN  COALESCE(t.SI_Ubicacion, c.SI_Ubicacion) ELSE NULL END)AS SI_Ubicacion,
(CASE WHEN c.SI_OV IS NOT NULL THEN  COALESCE(t.SI_Ubicacion_Fisica, c.SI_Ubicacion_Fisica) ELSE NULL END)AS SI_Ubicacion_Fisica,
SI_Num_Articulo = COALESCE(t.SI_Articulo, c.SI_Num_Articulo),
NULL,
SI_Num_Conteo = COALESCE(cs.SI_Num_Conteo,2),
GETDATE(),
'Admin',
c.SI_OV 
FROM SI_Inventario_Teorico_QAD t
full JOIN SI_Conteo c
ON t.SI_Articulo = c.SI_Num_Articulo
AND t.SI_Ubicacion = c.SI_Ubicacion 
INNER JOIN SI_Maestro_Ref_QAD m 
ON  t.SI_Articulo = m.SI_Num_Articulo
OR c.SI_Num_Articulo = m.SI_Num_Articulo
FULL JOIN SI_Consecutivo cs
ON  c.SI_Num_Inventario = cs.SI_Num_Inventario
AND cs.SI_Estado = 0
WHERE c.SI_Num_Articulo = 201423 OR t.SI_Articulo = 201423 

Basicallly I have combined both inserts into one Insert, which includes both of the columns , where you want a switch based on Case. Only one column out of SI_Ubicacion and SI_Ubicacion_Fisica will be set based on s.SI_OV value. Hope you got what I am saying,.

Note: I Could not execute this as I don't have any table structure/data with me. I have modified your query manually and posted it here.

Clarify your question. You have a select statement that returns a resultset of some number of rows. You propose to insert them into a table. You claim to need to use if/else (or similar) but it is not clear why. Your proposed insert statements differ by a single column - is that correct? If so, then you probably need to use 2 different insert statements - one to handle the non-null situation and one to handle the null situation. You cannot dynamically change the column list of the inserted table.

OTOH, perhaps you just want to swap the value inserted into the SI_Ubicacion column of the SI_Conteo table? If so, you can probably use isnull or coalesce in the select statement (much like you do now - just differently).

In short: the CASE construct needs to "live" in your SELECT clause of you SQL statement. The receiving INSERT clause should always mention both column names like this

INSERT INTO SI_CONTEO (SI_Num_Inventario, 
  SI_Ubicacion, SI_Ubicacion_fisico,
  SI_Num_Articulo, SI_Cantidad,SI_Num_Conteo,
  SI_Fecha_Conteo, SI_Usuario,SI_OV)
SELECT SI_Num_Inventario = COALESCE (t.SI_Num_Inventario,c.SI_Num_Inventario),
  SI_Ubicacion = CASE WHEN SI_OV IS NULL THEN COALESCE(t.SI_Ubicacion, c.SI_Ubicacion) END,
  SI_Ubicacion_Fisica = CASE WHEN NOT SU_OV IS NULL THEN COALESCE(t.SI_Ubicacion_Fisica, c.SI_Ubicacion_Fisica) END,
  SI_Num_Articulo = COALESCE(t.SI_Articulo, c.SI_Num_Articulo), 
  NULL, ...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM