在SELECT中,根据字段值取一组字段或另一组字段

时间:2013-07-02 08:23:17

标签: sql-server

以下SELECT中注释掉的部分有什么问题?
如果我取消注释整个CASE ... END,则SELECT变为无效 我想要的是,取决于是否有送货地址,取一组地址字段或另一组,理想情况下不重复条件或使用每个字段的COALESCE。我正在使用SQL Server 2008 R2 谢谢!

  SELECT a, b, c,
  --        CASE x is null 
  --            THEN d, e, f,
  --            ELSE g, h, i,
  --        END
        k, l, m
  FROM sometable

3 个答案:

答案 0 :(得分:2)

考虑将x的条件放在where子句中,然后加入union

select a,b,c,d,e,f from table where x is null
union
select a,b,c,g,h,i from table where x is not null

案件需要一个时间。我总是使用这个结构

CASE ...
WHEN ...
THEN ...
ELSE ...
END AS Fieldname

所有5个必须存在。它可以用来定义一个ouputfield。在其中你当然可以使用煤炭,但它不会回馈一系列油田

编辑:ELSE实际上没有必要,请阅读下面的知情评论

答案 1 :(得分:2)

此查询将为您提供正确的答案,并且也很容易修改

select
    s.a, s.b, s.c,
    a.f1, a.f2, a.f3,
    s.k, s.l, s.m
from sometable as s
    outer apply (
        select s.d as f1, s.e as f2, s.f as f3 where s.x is null
        union all
        select s.g as f1, s.h as f2, s.i as f3 where s.x is not null
    ) as a

SQL FIDDLE EXAMPLE

答案 2 :(得分:2)

您错过了WHEN,并且只允许您从CASE 表达式返回单个值:

SELECT a, b, c,
      CASE WHEN x is null 
          THEN d
          ELSE g
      END,
      CASE WHEN x is null 
          THEN e
          ELSE h
      END,
      CASE WHEN x is null 
          THEN  f
          ELSE i
      END,
    k, l, m
FROM sometable

这也假定dg的类型兼容,(eh)和(f,{{1} })