从结果中排除特定的列在SQL Server

问题描述:

可能重复:
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 

谢谢。

在查询中不指定列名被认为是不好的做法。

您可以将数据推送到#temp表中,然后更改该#temp中的列以删除COLUMN,然后SELECT * FROM #temp。

这将是无效的,但它会得到你所要求的结果。但是,默认情况下,最好进入指定所需的所有列的方式。如果有人ALTER你的初始表,即使使用上面的push #temp方法,你也会得到不同的列。

不要使用*,但给你感兴趣的领域。这很简单。因为订单没有定义,所以使用“*”很不妥当。

由于您要根据RowNum的值排序结果,因此不能从结果中排除此列。您可以将查询结果保存在临时表中,然后在临时表上进行另一个查询,并提供要显示在结果中的列(而不是select *)。这种方法将显示除RowNum以外的所有列,这些列是根据RowNum的值排序的。

这应该工作,我不知道你的列的名称,所以使用通用名称。尽量不要使用*其认为不好的做法,使人们很难阅读你的代码。

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