2010-09-13 3 views
5

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

+2

В каждой ячейке чего? –

+0

Положите «все в клетку»? Отчет SSRS? Электронная таблица Excel? –

+0

У меня есть 2 единицы. 1 имеет данные, а 1 - нет. Я хочу показать данные с 1 единиц, но показывать только пробелы для всех остальных единиц данных, у которых нет данных. Если это имеет смысл? – user380432

ответ

2

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

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

Это возможное решение. Измените свой ЕКОМ на следующее:

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. Левые внешние соединения будут включать данные, связанные с каждым блоком, но не будут исключать единицы, если нет связанных данных.

+0

Это фактически возвращает все периоды отчета, которые не будут работать, потому что я пытаюсь получить только 2126. Есть данные для единицы в разные периоды отчета, но не этот период отчета. Если я переместю это в предложение where, он все равно снова не будет возвращать строки. – user380432

+0

К сожалению. неправильно прокомментируйте свой комментарий о предложении where. – bobs

+0

Да, я верю, что мы только ничего не вернем ... хммм. – user380432

4

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

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

Проблема заключается в том, что у меня может быть 1 единица, который показывает данные и 1 блок, который не отображает данные, таким образом это будет показывать только данные одного устройства, но я хочу, чтобы оба устройства отображали .... – user380432

+0

@anicolais - для вашего второго блока, где вы хотите показать пустые данные, см. ответ от десяти. Это поможет? –

+0

есть исходный запрос в OP – user380432

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

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

3

Поместите пустую строку выбора в нижней части союза

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

На основании отправленного кода, я думаю, что вы хотите, чтобы пустой из столбцов из таблицы UnitType, как это только один вы» re left-join to to. В этом случае используют

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

Это все еще не возвращает строк для меня, если я говорю u.number = 'e2499', он просто не дает строк. Мне нужно это, чтобы указать номер устройства, но нет данных. – user380432

+0

Затем некоторые из ваших текущих соединений INNER должны быть LEFT-соединениями, в зависимости от того, в какой таблице вы не находите соответствующую строку. Затем используйте ISNULL, как и в моем ответе, чтобы очистить эти столбцы. –

+0

Таблица, в которой нет строки соответствия, является IUA, поэтому я не уверен, что я буду делать здесь, поскольку большинство из них имеют ошибки преобразования при выполнении ISNULL. – user380432

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

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

0

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

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

Это создает ряд пробелов, если совпадений нет.

Смежные вопросы