2010-09-13 16 views
5

Tengo una instrucción de selección y quiero decir si esta declaración de selección no devuelve ninguna fila y luego ponga un '' en cada celda. ¿Cómo hago esto?SQL si no se devuelven las filas haga esto

+2

En cada célula de qué? –

+0

Ponga un '' en cada celda de qué? ¿Un informe de SSRS? ¿Una hoja de cálculo de Excel? –

+0

Tengo 2 unidades. 1 tiene datos, y 1 no. Quiero mostrar los datos de 1 unidad, pero solo mostrar los espacios en blanco para todos los datos de otras unidades que no tienen datos. ¿Si eso tiene algún sentido? – user380432

Respuesta

2

Parece que todavía no obtiene todas las filas que desea. ¿Cierto? Creo que @Joe Sefanelli proporciona una parte importante de su solución, y luego menciona que necesita cambiar INNER a IZQUIERDA.

Entonces, dices que quieres mostrar todas las unidades en tu lista de unidades. Y, si no hay datos para una unidad, entonces muestre la unidad y los espacios en blanco para los datos que no existen.

Aquí hay una posible solución. Cambiar su cláusula FROM a lo siguiente:

FROM [dbo].[Unit] u 
LEFT OUTER JOIN 
    (
    SELECT * 
    FROM [dbo].[IUA] i 
    JOIN [dbo].[Reports] r ON r.[Report_ID] = i.[Report_ID] 
    JOIN [dbo].[State] s ON i.[St_ID] = s.[St_Id] 
    WHERE r.[Account] = [dbo].[fn_Get_PortalUser_AccountNumber](11-11) 
     AND r.[Rpt_Period] = '2126' 
     AND r.[RptName] = 'tfd' 
     AND r.[Type] = 'h'  
    ) ir ON ir.[Unit_ID] = u.[Unit_ID] 
LEFT JOIN [dbo].[UnitType] ut ON u.[UnitType] = ut.[UnitType] 
WHERE u.[Unit] IN (SELECT [VALUE] 
       FROM dbo.udf_GenerateVarcharTableFromStringList(@Units, ',')) 
; 

Con este cambio se obtendrá una lista de unidades que se encuentran en la lista @Units. Las uniones externas izquierdas incluirán los datos asociados con cada unidad, pero no excluirán las unidades si no hay datos asociados.

+0

Esto realmente devuelve todos los períodos de informe que no funcionarían porque estoy tratando de obtener solo 2126. Hay datos para la unidad en diferentes períodos de informe pero no en este período de informe. Si muevo esto a la cláusula where, todavía no devuelve filas. – user380432

+0

Vaya. leyó mal su comentario sobre la cláusula where. – bobs

+0

Sí, creo que sí, pero esto no devuelve nada otra vez ... hmmm. – user380432

4

Prueba esto -

IF NOT EXISTS (SELECT 'x' FROM <TABLE> ....) 
BEGIN 
    -- Your logic goes here 
END 
+0

El problema es que podría tener 1 unidad que muestra datos y 1 unidad que no muestra datos, por lo tanto, esto solo mostraría los datos de una unidad, pero quiero que se muestren ambas unidades .... – user380432

+0

@anicolais - Para su segunda unidad donde desea mostrar datos en blanco, ver la respuesta de tenfour. ¿Eso ayudaría? –

+0

existe la consulta inicial en OP – user380432

8
select a, b, c from t 
if @@rowcount = 0 
    select '' as a, '' as b, '' as c 

Pero asegúrese de entender que '' puede tener un tipo de datos diferente de columnas a, b, y c.

3

Ponga su fila en blanco de selección en la parte inferior de una unión

select x.JobName , x.Description 
from MasterJobList x 
where x.IsCycleJob = 1 

union all 

select "" , "" 
from MasterJobList x 
where not exists 
    (
    select 1 
    from MasterJobList x 
    where x.IsCycleJob = 1 
    ) 
1

Basado en el código publicado, creo que lo que busca es dejar en blanco las columnas de la tabla UnitType ya que es el único que se' re left-joining a. En ese caso use

ISNULL(ut.[Description], '') AS UnitType 
+0

Esto todavía no devuelve filas si digo u.number = 'e2499' simplemente no da filas. Necesito dar el número de unidad pero no datos. – user380432

+0

Entonces algunas de sus combinaciones INNER actuales deben ser uniones IZQUIERDAS, dependiendo de la (s) tabla (s) en las que no encuentre una fila coincidente. Luego use ISNULL como en mi respuesta para poner en blanco esas columnas también. –

+0

La tabla que no tiene una fila de coincidencia es IUA, así que no estoy seguro de qué haría aquí, ya que la mayoría tiene errores de conversión al hacer ISNULL – user380432

0
select top 1 isnull(max(col2),' ') as noNullCol from table1 where col1='x' 

max devuelve un null donde no tiene filas continuación isnull función devuelve ' ' lugar un valor null

0

He aquí un ejemplo que utilizo para una sola columna - es fácil y sólo produce una fila en blanco si no hay coincidencias en el conjunto de datos.

select Company from customer where [email protected] 
union 
select '' where not exists (select 1 from customer where [email protected]) 

Esto crea una fila de blanco (s) cuando no hay coincidencias.

Cuestiones relacionadas