【问题标题】:Exclude specific column from result in SQL Server [duplicate]从 SQL Server 的结果中排除特定列 [重复]
【发布时间】:2012-03-10 15:03:34
【问题描述】:

可能重复:
SQL exclude a column using SELECT * [except columnA] FROM tableA?

我有以下查询,我想从结果中排除列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

谢谢。

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    这应该可以,我不知道您的列的名称,所以使用了通用名称。尽量不要使用 * 它被认为是不好的做法,使人们难以阅读您的代码。

    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
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          【解决方案4】:

          不要使用 * 而是给出你感兴趣的字段 lsit。就这么简单。无论如何,使用“*”是不好的做法,因为没有定义顺序。

          【讨论】:

            猜你喜欢
            • 2020-05-08
            • 2015-12-19
            • 1970-01-01
            • 2021-07-13
            • 1970-01-01
            • 2014-06-06
            • 1970-01-01
            • 2014-10-09
            相关资源
            最近更新 更多