2

下面 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
4

3 回答 3

2

考虑将 x 的条件放在 where 子句中,然后并集

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

案件需要一个WHEN。我总是使用这种结构

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

所有 5 必须在场。它可用于定义一个输出字段。在其中你当然可以合并,但它不会返回一系列字段

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

于 2013-07-02T08:48:52.047 回答
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 提琴示例

于 2013-07-02T08:51:10.683 回答
2

您缺少 a 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兼容的,如 ( e, h) 和 ( f, i)

于 2013-07-02T08:51:26.467 回答