2014-12-31 2 views
1

Мне нужно, если результат суб-запроса равен нулю, тогда он заменит на «-». Я попробовал этотЗаменить результат суб-запроса в SQL

REPLACE (string_expression , string_pattern , string_replacement)

REPLACE((SELECT [StandNo] FROM [dbo].[BusStand] where id=b.[ReturnStand]), char(0), '-')

Но не решение, потому что я думаю, что это берет подзапрос, как строкового_выражения.

Решение ниже (SELECT isnull([StandNo],'-') FROM [dbo].[BusStand] where id=b.[ReturnStand]) также не сработало.

Извините, ребята, я нашел проблему не с подзапросом b.[ReturnStand] является нулевым, потому что он выбирает нулевые строки и помещает нуль в результат. Мой запрос выглядит примерно так.

SELECT b.[Id], 
     b.[Date], 
     (SELECT [BusId] 
     FROM [dbo].[Bus] 
     WHERE id = [breakDownBusNo])   AS Bus, 
     (SELECT [RouteNo] 
     FROM [dbo].[Route] 
     WHERE id = bl.[routeNo])    AS [Route No], 
     (SELECT [StandName] 
     FROM [dbo].[BusStand] 
     WHERE id = b.[stand])     AS [Breakdown Stand], 
     b.[DeadKm]        AS [Distance From Depo], 
     (SELECT COALESCE([StandNo], 0) 
     FROM [dbo].[BusStand] 
     WHERE id = b.[ReturnStand])   [On Route Stand], 
     COALESCE([ReturnKm], 0)     AS [Distance of on route place], 
     (b.[DeadKm] + COALESCE([ReturnKm], 0)) AS Total 
FROM [dbo].[BreakDown] AS b 
     INNER JOIN [dbo].[Bus Log] AS bl 
       ON b.BusLogId = bl.Id 
     INNER JOIN [dbo].[DriverAttendance] AS da 
       ON da.Id = b.DrvrAttnDnceIdLog 

Пожалуйста, не входите в сложность запроса. Мне просто нужно показать, где я его использую. Теперь, как я могу заменить null на «-» на стенде маршрута.

+0

вы можете поделиться им на sqlfiddle –

ответ

0

Ваш синтаксис неправильно Ваш нужно добавить имя столбца или переменные в string_expression

SELECT REPLACE(isnull([StandNo],0),'0', '-') FROM [dbo].[BusStand] 
where id=b.[ReturnStand] 

или лучшие способы

Нет необходимости использовать Replace

....IN 
(SELECT isnull([StandNo],'-') FROM [dbo].[BusStand] 
where id=b.[ReturnStand]) 
0

Пожалуйста, попробуйте:

(SELECT ISNULL([StandNo] , '-') FROM [dbo].[BusStand] where id=b.[ReturnStand]) 
0

Использование COALESCE функция

SELECT COALESCE((SELECT [StandNo] FROM [dbo].[BusStand] where id=b.[ReturnStand]) , '-') 
FROM [dbo].[tableA] AS b; 
0

вы можете непосредственно сделать это

SELECT b.[Id], 
     b.[Date], 
     (SELECT [BusId] 
     FROM [dbo].[Bus] 
     WHERE id = [breakDownBusNo])   AS Bus, 
     (SELECT [RouteNo] 
     FROM [dbo].[Route] 
     WHERE id = bl.[routeNo])    AS [Route No], 
     (SELECT [StandName] 
     FROM [dbo].[BusStand] 
     WHERE id = b.[stand])     AS [Breakdown Stand], 
     b.[DeadKm]        AS [Distance From Depo], 

    **** (SELECT isnull([StandNo], '-') 
    FROM [dbo].[BusStand] 
    WHERE id = b.[ReturnStand])   [On Route Stand], **** 


    COALESCE([ReturnKm], 0)     AS [Distance of on route place], 
    (b.[DeadKm] + COALESCE([ReturnKm], 0)) AS Total 
    FROM [dbo].[BreakDown] AS b 
    INNER JOIN [dbo].[Bus Log] AS bl 
      ON b.BusLogId = bl.Id 
    INNER JOIN [dbo].[DriverAttendance] AS da 
      ON da.Id = b.DrvrAttnDnceIdLog 
Смежные вопросы