pasar - sql server transponer tabla
dónde colocar CASO CUANDO la columna ES NULA en esta consulta (4)
¡Gracias por toda tu ayuda! @Svetoslav Tsolov lo tenía muy cerca, pero todavía estaba recibiendo un error, hasta que descubrí que el paréntesis de cierre estaba en el lugar equivocado. Aquí está la consulta final que funciona:
SELECT dbo.AdminID.CountryID, dbo.AdminID.CountryName, dbo.AdminID.RegionID,
dbo.AdminID.[Region name], dbo.AdminID.DistrictID, dbo.AdminID.DistrictName,
dbo.AdminID.ADMIN3_ID, dbo.AdminID.ADMIN3,
(CASE WHEN dbo.EU_Admin3.EUID IS NULL THEN dbo.EU_Admin2.EUID ELSE dbo.EU_Admin3.EUID END) AS EUID
FROM dbo.AdminID
LEFT OUTER JOIN dbo.EU_Admin2
ON dbo.AdminID.DistrictID = dbo.EU_Admin2.DistrictID
LEFT OUTER JOIN dbo.EU_Admin3
ON dbo.AdminID.ADMIN3_ID = dbo.EU_Admin3.ADMIN3_ID
Tengo problemas para traducir una consulta de MS Access a SQL:
SELECT id, col1, col2, col3
FROM table1
LEFT OUTER JOIN table2
ON table1.id = table2.id
LEFT OUTER JOIN table3
ON table1.id = table3.id
hasta ahora todo bien, pero aquí está la parte (CASE) donde me quedo atascado:
CASE WHEN table3.col3 IS NULL THEN table2.col3 AS col4 ELSE table3.col3 as col4
Sé que la línea anterior no funciona, pero espero que insinúe lo que estoy tratando de lograr. ¡Gracias!
ACTUALIZACIÓN: Todas las sugerencias hasta ahora han resultado en "Sintaxis incorrecta cerca del error de la palabra clave ''AS''", así que tal vez me falta algo más. Debajo de la consulta real. El problema es que tenemos dos tablas, ambas con una columna EUID. Si dbo.EU_Admin3.EUID no es NULL, tiene prioridad en la unión. Si dbo.EU_Admin3.EUID es NULL, use dbo.EU_Admin2.EUID en su lugar. Espero que aclare esto.
SELECT dbo.AdminID.CountryID, dbo.AdminID.CountryName, dbo.AdminID.RegionID,
dbo.AdminID.[Region name], dbo.AdminID.DistrictID, dbo.AdminID.DistrictName,
dbo.AdminID.ADMIN3_ID, dbo.AdminID.ADMIN3
(CASE WHEN dbo.EU_Admin3.EUID IS NULL THEN dbo.EU_Admin2.EUID ELSE dbo.EU_Admin3.EUID END AS EUID)
FROM dbo.AdminID
LEFT OUTER JOIN dbo.EU_Admin2
ON dbo.AdminID.DistrictID = dbo.EU_Admin2.DistrictID
LEFT OUTER JOIN dbo.EU_Admin3
ON dbo.AdminID.ADMIN3_ID = dbo.EU_Admin3.ADMIN3_ID
No puede entender su problema real, pero su declaración de caso es incorrecta
CASE
WHEN
TABLE3.COL3 IS NULL
THEN TABLE2.COL3
ELSE
TABLE3.COL3
END
AS
COL4
Parece que podría pertenecer a la declaración de selección:
SELECT id, col1, col2, col3, (CASE WHEN table3.col3 IS NULL THEN table2.col3 AS col4 ELSE table3.col3 as col4 END)
FROM table1
LEFT OUTER JOIN table2
ON table1.id = table2.id
LEFT OUTER JOIN table3
ON table1.id = table3.id
Prueba esto:
CASE WHEN table3.col3 IS NULL THEN table2.col3 ELSE table3.col3 END as col4
El as col4
debe ir al final del CASO de la declaración. También ten en cuenta que te falta el END
también.
Otra opción probablemente más simple sería:
IIf([table3.col3] Is Null,[table2.col3],[table3.col3])
Solo para aclarar, MS Access no es compatible con COALESCE. Si fuera así, sería la mejor manera de hacerlo.
Editar después de un cambio radical de pregunta:
Para convertir la consulta en SQL Server, puede usar COALESCE (por lo que técnicamente se respondió antes):
SELECT dbo.AdminID.CountryID, dbo.AdminID.CountryName, dbo.AdminID.RegionID,
dbo.AdminID.[Region name], dbo.AdminID.DistrictID, dbo.AdminID.DistrictName,
dbo.AdminID.ADMIN3_ID, dbo.AdminID.ADMIN3,
COALESCE(dbo.EU_Admin3.EUID, dbo.EU_Admin2.EUID)
FROM dbo.AdminID
Por cierto, su declaración CASE faltaba un ,
antes del campo. Es por eso que no funcionó.