【问题标题】:Case when within a union?工会内部的情况?
【发布时间】:2011-11-11 21:34:40
【问题描述】:

这是我的代码:

SELECT 'Add or remove a keyword' AS 'Keyword', '1' AS 'row number'
UNION
SELECT '---------------------', '2'
UNION
SELECT 
   CASE
   WHEN @list_item = 'duration'
   THEN (SELECT duration FROM durationTable)
   END
   CASE
   WHEN @list_item = 'location'
   THEN (SELECT location FROM locationTable)
   END
, '3'
ORDER BY 2

问题是,这会将持续时间和位置选择为子查询,并且子查询仅限于一个结果,此外,我似乎无法找出正确的语法来将我的 CASE 提升一个级别,因此查询不是子查询。

有没有一种方法可以保持联合/选择允许我的结构,同时更改查询哪个表的最后一位,并检索整个表列而不是一个结果?

有什么建议吗?非常感谢您的观看!

【问题讨论】:

    标签: sql select union case


    【解决方案1】:

    首先,您应该知道这是一个糟糕的设计。您正在混淆表示层和数据层,这将导致问题。

    但是,如果您绝对致力于这样做,您可以通过额外的SELECT 来做到这一点:

    ...
    UNION
    
    SELECT duration FROM durationTable, '3'
    WHERE @list_item = 'duration'
    
    UNION
    
    SELECT location FROM locationTable, '3'
    WHERE @list_item = 'location'
    ...
    

    不匹配的查询将返回一个空的结果集并被忽略。

    【讨论】:

      【解决方案2】:

      它不漂亮,但我认为这应该可行:

      SELECT 'Add or remove a keyword' AS 'Keyword', '1' AS 'row number'
      UNION
      SELECT '---------------------', '2'
      UNION
      SELECT duration, '3' FROM durationTable WHERE 1 = (SELECT CASE WHEN @list_item = 'duration' THEN 1 ELSE 0 END)
      UNION
      SELECT location, '3' FROM locationTable WHERE 1 = (SELECT CASE WHEN @list_item = 'location' THEN 1 ELSE 0 END)
      

      【讨论】:

      • 您为什么使用CASE 而不仅仅是WHERE 子句?
      • @JNK,你是对的,我应该只使用一个简单的 WHERE 子句,而不是用 CASE 使其复杂化。我赞成您的回答,因为它是更好的解决方案。
      【解决方案3】:
      SELECT 'Add or remove a keyword' AS 'Keyword', '1' AS 'row number'
      UNION
      SELECT '---------------------', '2'
      UNION
      SELECT duration,3 FROM durationTable WHERE @list_item = 'duration'
      UNION
      SELECT location,3 FROM locationTable WHERE @list_item = 'location'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-30
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多