【问题标题】:Group data irrespective of its presence in the separate columns分组数据,无论其是否存在于单独的列中
【发布时间】:2018-12-03 12:04:09
【问题描述】:

我有一张包含不同航线的表格,我想对它们进行分组,而不考虑哪个是始发城市,哪个是目的地。

例如路线阿姆斯特丹-伦敦和伦敦-阿姆斯特丹的值应由阿姆斯特丹-伦敦路线组合在一起。

有人遇到过类似的问题吗?

【问题讨论】:

    标签: sql sql-server tsql group-by


    【解决方案1】:

    我想你正在寻找

    CREATE TABLE Routes(
      ID INT,
      OriginalLocation VARCHAR(45),
      Destination VARCHAR(45)
    );
    
    INSERT INTO Routes VALUES
    (1, 'Amsterdam', 'London'),
    (2, 'London', 'Amsterdam'),
    (3, 'London', 'Algeria'),
    (4, 'Algeria', 'France');
    
    WITH C AS
    (
      SELECT *,
             CASE WHEN EXISTS(
                              SELECT 1 
                              FROM Routes 
                              WHERE OriginalLocation = R.Destination --You can use UPPER()/LOWER() here
                                    AND
                                    Destination = R.OriginalLocation --and here too
                                    AND
                                    ID != R.ID
                             )
                  THEN ID
                  ELSE 0
             END G
      FROM Routes R
    )
    SELECT ID,
           OriginalLocation,
           Destination
    FROM C
    WHERE NOT (G > 1); 
    

    返回:

    +----+------------------+-------------+
    | ID | OriginalLocation | Destination |
    +----+------------------+-------------+
    |  1 | Amsterdam        | London      |
    |  3 | London           | Algeria     |
    |  4 | Algeria          | France      |
    +----+------------------+-------------+
    

    Demo

    【讨论】:

      【解决方案2】:

      如果你有这样的桌子

      [flight routes]
      
      originlocation| destinationlocation
       Amsterdam    | London
       London       | Amsterdam
      

      您可以尝试如下的一组 sql 查询

      ; with orderedroutes as
      (
      select distinct
         originlocation= Case when originlocation < destinationlocation  then originlocation else destinationlocation  end , 
         destinationlocation  = Case when originlocation < destinationlocation  then destinationlocation  else originlocation end 
      from [flight routes]
      )
      
      select * from orderedroutes 
      

      【讨论】:

        猜你喜欢
        • 2014-10-10
        • 2018-08-05
        • 2022-10-13
        • 2020-02-23
        • 1970-01-01
        • 2011-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多