【问题标题】:SQL query - comparing two items on distinct item - REVISITEDSQL 查询 - 比较不同项目上的两个项目 - 重新访问
【发布时间】:2010-11-07 23:02:36
【问题描述】:

作为我几天前在sql-query-comparing-two-items-on-distinct-item 提出的问题的补充,是否有可能在“evt”中没有出现“pers”之一的情况下删除空值的可能性。

输出

**EVT 约翰保罗差异** A1 1 2 -1 A2 2 3 -1 A3 2 NULL [此处有错误] - ** 要删除的项目 **

数据

**EVT 个人排名** A1 约翰 1 A1 保罗 2 A1 林戈 3 A1 乔治 4 A2 林戈 1 A2 约翰 2 A2 保罗 3 A2 乔治 4 A3 林戈 1 A3 约翰 2 A3 乔治 4

当前代码(感谢 Martin Smith)

SELECT 
      EVT,
      MAX(CASE WHEN Pers='John' THEN Rank END) AS John,
      MAX(CASE WHEN Pers='Paul' THEN Rank END) AS Paul,
      MAX(CASE WHEN Pers='John' THEN Rank END) - MAX(CASE WHEN Pers='Paul' THEN Rank END) as Difference
FROM YourTable 
WHERE Pers IN ('John','Paul')
GROUP BY EVT

提前致谢

【问题讨论】:

    标签: sql


    【解决方案1】:

    你可以添加一个having子句:

    GROUP BY EVT
    HAVING MAX(CASE WHEN Pers='John' THEN Rank END) IS NOT NULL
           AND MAX(CASE WHEN Pers='Paul' THEN Rank END) IS NOT NULL
    

    【讨论】:

      【解决方案2】:

      或者

      WITH NullSNotYetExcluded AS (
      
        --insert your SELECT statement from Martin here--
      
      )
        SELECT * FROM NullsNotYetExcluded 
        WHERE Difference IS NOT NULL;
      

      另一种选择(可能运行成本更高)是添加

      HAVING COUNT(DISTINCT Pers) = 2
      

      【讨论】:

        猜你喜欢
        • 2011-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多