2017-10-11 140 views
0

我想为一个固定值'ALLE'添加到我的工会条款列,但我得到一个错误:无效列名称

Invalid column name BoltPattern

order by条款

究竟是如何做我这样做?

SELECT 'ALLE' 
UNION 
SELECT BoltPattern 
FROM [OminiTire].[Data].[WheelData] 
WHERE BoltPattern IS NOT NULL 
GROUP BY BoltPattern 
ORDER BY 
    CASE 
     WHEN BoltPattern = 'ALLE' 
      THEN 1 
     ELSE 2 
    END, BoltPattern 
+0

这里的结果是什么? – maSTAShuFu

回答

2

我推荐使用子查询。 。 。和union all

SELECT BoltPattern 
FROM ((SELECT 'ALLE' as BoltPattern, 1 as ord) 
     UNION ALL 
     (SELECT DISTINCT BoltPattern, 2 as ord 
     FROM [OminiTire].[Data].[WheelData] 
     WHERE BoltPattern is not null 
    ) 
    ) x 
ORDER BY ord, BoltPattern; 

注:

  • UNION招致开销,删除重复。 UNION ALL不。
  • 我发现SELECT DISTINCT比使用GROUP BY更简洁。
  • 子查询允许您定义明确的排序 - 比较复杂的CASE表达式更易于维护(在我看来)。
+0

我倾向于喜欢CTE而不是像这样的子查询...更容易阅读和维护,完全相同的性能。 – pmbAustin

+0

@pmbAustin。 。 。虽然在SQL Server中这是真的,但在所有数据库中都不是这样。一些数据库比子查询更有可能实现CTE。 –