Как использовать If Not Exist с производной таблицей в SQL Server

Мне нужен некоторый вывод. Если никакие записи не возвращают мой оператор выбора, я устанавливаю некоторые значения по умолчанию, иначе вернутся фактические значения. Я попробовал ниже скрипт, я получил ошибку

SELECT * 
FROM (
     IF (NOT EXISTS (SELECT 
                         ClientName AS Client, LoadMonth, 
                         RecordCount AS No_Valid_Indicator_Count
                     FROM 
                         DBA.dbo.UnifiedDatabaseSummary 
                     WHERE 
                         ClientName = 'XXXXX' 
                         AND LoadMonth = (SELECT MAX(LoadMonth) 
                                          FROM DBA.dbo.UnifiedDatabaseSummary 
                                          WHERE ClientName = 'XXXXX')
                         AND ItemValue = 'NonICD09or10' 
                         AND Item = 'TotalClaims'))
BEGIN
    SELECT 
        'XXXXX' AS Client, 201509 AS LoadMonth,
        0 AS No_Valid_Indicator_Count
END
ELSE
    SELECT
        ClientName AS Client, LoadMonth, 
        RecordCount AS No_Valid_Indicator_Count
    FROM
        DBA.dbo.UnifiedDatabaseSummary 
    WHERE 
        ClientName = 'XXXXX' 
        AND LoadMonth = (SELECT MAX(LoadMonth) 
                         FROM DBA.dbo.UnifiedDatabaseSummary 
                         WHERE ClientName = 'XXXXX')
        AND ItemValue = 'NonICD09or10' 
        AND Item = 'TotalClaims') T8

Ошибка :

Сообщение 156, уровень 15, состояние 1, строка 2
Неверный синтаксис рядом с ключевым словом 'IF'.
Сообщение 102, уровень 15, состояние 1, строка 14
Неправильный синтаксис рядом с ')'.

Как это решить?


person Dinesh    schedule 18.11.2015    source источник


Ответы (1)


Я не думаю, что вы можете использовать select поверх If not exists, просто удалите его и поместите результат во временную таблицу. Так

IF NOT EXISTS (SELECT clientname  AS Client, 
                      loadmonth, 
                      recordcount AS No_Valid_Indicator_Count 
               FROM   dba.dbo.unifieddatabasesummary 
               WHERE  clientname = 'XXXXX' 
                      AND loadmonth = (SELECT Max(loadmonth) 
                                       FROM   dba.dbo.unifieddatabasesummary 
                                       WHERE  clientname = 'XXXXX') 
                      AND itemvalue = 'NonICD09or10' 
                      AND item = 'TotalClaims') 
  BEGIN 
      SELECT 'XXXXX' AS Client, 
             201509  AS LoadMonth, 
             0       AS No_Valid_Indicator_Count into #temp
  END 
ELSE 
  SELECT clientname  AS Client, 
         loadmonth, 
         recordcount AS No_Valid_Indicator_Count into #temp
  FROM   dba.dbo.unifieddatabasesummary 
  WHERE  clientname = 'XXXXX' 
         AND loadmonth = (SELECT Max(loadmonth) 
                          FROM   dba.dbo.unifieddatabasesummary 
                          WHERE  clientname = 'XXXXX') 
         AND itemvalue = 'NonICD09or10' 
         AND item = 'TotalClaims' 

Select * from #temp Inner join ..
person Pரதீப்    schedule 18.11.2015
comment
Мне нужно внутренне присоединить этот вывод к другой таблице, поэтому я использовал концепцию производной таблицы. - person Dinesh; 18.11.2015
comment
@Dinesh - добавить результат во временную таблицу - person Pரதீப்; 18.11.2015
comment
Создайте табличную переменную или временную таблицу и заполните ее. - person Dan Bracuk; 18.11.2015
comment
Но я использую более 10 внутренних соединений для получения окончательного вывода в одной строке. В этом случае, как использовать временную таблицу и табличную переменную - person Dinesh; 18.11.2015
comment
@Dinesh Добавьте временную таблицу в качестве 11-го внутреннего соединения к существующему соединению, и ничего не сломается. Я уже показал вам, как добавить результат во временную таблицу. Теперь вам просто нужно добавить темп к вашим соединениям - person Pரதீப்; 18.11.2015
comment
@MM93 и @Dan Bracuk - Спасибо. Есть ли какой-либо другой метод, доступный для этого сценария? - person Dinesh; 18.11.2015