【问题标题】:sql Column 1 and Column 2 contain same value then condition A else Bsql第1列和第2列包含相同的值然后条件A else B
【发布时间】:2014-07-30 18:33:12
【问题描述】:

这是我的查询,但它显示的结果不是我的预期。

SELECT  
a.PROJECT_NO, 
CASE WHEN a.PROJECT_NO = b.PROJECT_NO THEN 'TRUE' ELSE 'FALSE' END AS CONDITION 
FROM PROJECT a
LEFT OUTER JOIN WORKSHEET b ON (b.PROJECT_NO = a.PROJECT_NO)

Table a                 Table b
Project_No              Project_No
1111                    1111  
2222                    3333 
3333                    
4444                    

正确的结果应该是

Project_No      Condition           
1111             True                
2222             FALSE               
3333             TRUE                
4444             FALSE               

我的查询结果,所有条件状态都显示为真

Project_No      Condition
1111             TRUE 
2222             TRUE 
3333             TRUE
4444             TRUE

任何人都可以帮我解决它。谢谢

【问题讨论】:

  • 您的查询应该返回您想要的结果。你能设置一个 SQL Fiddle 吗?实际上,您的查询有不平衡的括号,所以它不会返回错误以外的任何内容。

标签: sql join case


【解决方案1】:

a.PROJECT_NO = b.PROJECT_NO 总是返回null,当b.PROJECT_NO = null 并且选择CASE 中的第一个WHEN 时返回TRUE,否则,当b.PROJECT_NO 不是NULL 时也返回TRUE由于正确的相等结果。所以最简单的方法是对t2.Project 列使用IS NULL 条件:

SELECT a.PROJECT_NO
     , (CASE WHEN b.PROJECT_NO IS NULL THEN 'TRUE' ELSE 'FALSE' END) AS CONDITION 
FROM PROJECT a LEFT OUTER JOIN WORKSHEET b ON b.PROJECT_NO = a.PROJECT_NO

【讨论】:

  • CASE行中的括号不平衡,请检查
【解决方案2】:

COALESCE包装它

COALESCE(CASE WHEN a.PROJECT_NO = b.PROJECT_NO THEN 'TRUE' END, 'FALSE')

【讨论】:

    【解决方案3】:

    你可以试试ISNULL

    试试这个

    SELECT  
    a.PROJECT_NO, 
    CASE WHEN (ISNULL(a.PROJECT_NO,0) = IsNULL(b.PROJECT_NO,1) THEN 'TRUE' ELSE 'FALSE' END AS CONDITION 
    FROM PROJECT a
    LEFT OUTER JOIN WORKSHEET b ON (b.PROJECT_NO = a.PROJECT_NO)
    

    【讨论】:

      【解决方案4】:

      我认为这样就可以了,您将不再需要加入

      选择
      a.PROJECT_NO,

      CASE WHEN a.PROJECT_NO IN (SELECT PROJECT_NO from WORKSHEET) THEN 'TRUE' ELSE 'FALSE' END AS CONDITION

      来自项目a

      【讨论】:

        【解决方案5】:

        另一种方式:)

        SELECT a.PROJECT_NO, 
               COALESCE (CONDITION,'FALSE') AS CONDITION FROM 
        PROJECT a
        OUTER APPLY
        (
            SELECT 'TRUE' AS CONDITION  
            FROM WORKSHEET
            WHERE PROJECT_NO =  a.PROJECT_NO
        ) AS Sub
        

        谢谢, barua.me

        【讨论】:

          猜你喜欢
          • 2019-09-12
          • 2022-08-15
          • 1970-01-01
          • 2021-05-26
          • 1970-01-01
          • 2020-06-09
          • 1970-01-01
          • 1970-01-01
          • 2019-09-22
          相关资源
          最近更新 更多