2012-02-20 3 views
1

Можно создать дубликат:
SQL exclude a column using SELECT * [except columnA] FROM tableA?Исключить конкретный столбец из результата в SQL Server

Я следующий запрос, и я хочу, чтобы исключить столбец RowNum из результата, как я могу это сделать ?

SELECT * 
FROM  
    (SELECT  
     ROW_NUMBER() OVER (ORDER BY [Report].[dbo].[Reflow].ReflowID) AS RowNum, * 
    FROM  
     [Report].[dbo].[Reflow] 
    WHERE  
     [Report].[dbo].[Reflow].ReflowProcessID = 2) AS RowConstrainedResult 
WHERE 
    RowNum >= 100 AND RowNum < 120 
ORDER BY 
    RowNum 

Thanks.

ответ

6

Считается неправильной практикой не указывать имена столбцов в вашем запросе.

Вы можете протащить данные в таблицу #temp, затем ALTER столбцы в этом #temp, чтобы DROP COLUMN, затем SELECT * FROM #temp.

Это было бы неэффективно, но оно даст вам результат, о котором вы просите. По умолчанию, однако, лучше всего найти способ указать все требуемые столбцы. Если кто-то АЛЬТЕРИРУЕТ вашу начальную таблицу, даже используя метод push #temp выше, вы получите разные столбцы.

2

Не используйте *, но укажите интересующий вас город. Это простой. Использование «*» - это неправильная практика, поскольку порядок не определен.

0

Поскольку вы хотите заказать результаты на основе значений RowNum, вы не можете исключить этот столбец из своих результатов. Вы можете сохранить результат своего запроса в таблице temp, а затем сделать другой запрос в таблице temp и указать столбцы, которые вы хотите показать в результатах (вместо select *). Такой подход отобразит все столбцы, кроме RowNum, которые упорядочены на основе значений RowNum.

0

Это должно работать, я не знаю названия ваших колонок, поэтому использовались общие имена. Попытайтесь не использовать * свою плохую практику, затрудняет чтение вашего кода.

SELECT [column1], 
     [column2], 
     [etcetc] 

FROM ( SELECT ROW_NUMBER() OVER(ORDER BY RowConstrainedResult.RowNum) [RN], 
      * 

      FROM (SELECT ROW_NUMBER() OVER (ORDER BY [Report].[dbo].[Reflow].ReflowID) AS RowNum, * 
        FROM  [Report].[dbo].[Reflow] 
        WHERE  [Report].[dbo].[Reflow].ReflowProcessID = 2 
       ) AS RowConstrainedResult 
      WHERE RowNum >= 100 
      AND RowNum < 120 
Смежные вопросы