SQL, если строки не возвращаются, сделайте это - PullRequest
5 голосов
/ 13 сентября 2010

У меня есть оператор выбора, и я хочу сказать, что если этот оператор выбора не возвращает никаких строк, тогда поместите '' в каждую ячейку.Как мне это сделать?

Ответы [ 7 ]

8 голосов
/ 13 сентября 2010
select a, b, c from t
if @@rowcount = 0
    select '' as a, '' as b, '' as c

Но убедитесь, что вы понимаете, что '' может иметь тип данных, отличный от столбцов a, b и c.

5 голосов
/ 13 сентября 2010

Попробуйте это -

IF NOT EXISTS ( SELECT 'x' FROM <TABLE> .... )
BEGIN
    -- Your logic goes here
END
3 голосов
/ 13 сентября 2010

Поместите пустой выбор строки внизу объединения

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 
    )
2 голосов
/ 13 сентября 2010

Похоже, вы все еще не получаете все строки, которые вы хотите. Правда? Я думаю, что @Joe Sefanelli обеспечивает важную часть вашего решения, а затем упоминает, что вам нужно поменять INNER на LEFT.

Итак, вы говорите, что хотите отобразить все единицы в списке своих единиц. И, если нет данных для единицы, отобразите единицу измерения и пустые данные для несуществующих данных.

Вот возможное решение. Измените предложение FROM на следующее:

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, ','))
;

С этим изменением вы получите список юнитов, которые есть в списке @Units. Левые внешние объединения будут включать данные, связанные с каждой единицей, но не будут исключать единицы, если нет связанных данных.

1 голос
/ 13 сентября 2010

Основываясь на опубликованном коде, я думаю, что вы хотите убрать столбцы из таблицы UnitType, так как это единственный, к которому вы присоединились.В этом случае используйте

ISNULL(ut.[Description], '')  AS UnitType
0 голосов
/ 27 марта 2013

Вот пример, который я использую для одного столбца - он прост и создает пустую строку только в том случае, если в наборе данных нет совпадений.

select Company from customer where customer=@Company
union
select '' where not exists (select 1 from customer where customer=@Company)

Это создает ряд пустых строк, когда естьнет совпадений.

0 голосов
/ 23 декабря 2011
select top 1 isnull(max(col2),' ') as noNullCol from table1 where col1='x'

max возвращает null, где нет строк, тогда isnull функция возвращает ' ' вместо null значение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...