【问题标题】:SQL - how to display group by columns only once in SQLSQL - 如何在 SQL 中仅按列显示一次分组
【发布时间】:2017-12-10 13:52:02
【问题描述】:

我有 3 列 表格中的国家、州、城市。

我想要带有国家和州的城市列表。

我想针对具有多个城市的州显示单个国家/地区名称之类的结果。

我确实按国家和州分组,每行显示所有国家和州。但我想要 只有这样一个国家名称和州名

Country  State        City
--------------------------------
India    Maharashtra  Mumbai
                      Pune
                      Nagpur
         Gujrat       Surat
                      ahmedabad
USA      New york     Albany
                      New york City
         california   Los angles

【问题讨论】:

  • 你应该在应用层做这种类型的操作,而不是在数据库中。
  • 你用的是哪个数据库?
  • SQL Server 2008 R2
  • @samina 解决了吗?

标签: sql sql-server sql-server-2008


【解决方案1】:

你试过了吗:

SELECT DISTINCT country, state, city FROM table
GROUP BY country ASC, state ASC
ORDER BY country ASC, state ASC, city ASC;

这将只返回每列的不同值。

【讨论】:

    【解决方案2】:

    正如@Gordon 所说,最好在获取数据后在应用层执行此操作。

    但如果你真的想在 sql 中这样做,这里有一个解决方案。

    ;WITH All_Data AS (
    
        SELECT 
              COUNTRY,
              STATE,
              CITY
        FROM 
              TABLE_NAME
        GROUP BY 
              COUNTRY,
              STATE,
              CITY
    --which gives all countries, states and cities.
    ),
    Grouped_by_Country AS (
    
        SELECT 
              *,
               ROW_NUMBER () OVER(PARTITION BY COUNTRY ORDER BY STATE ) AS COUNTRY_NO
        FROM 
             All_Data
    
    ),
    Grouped_by_State AS (
    
        SELECT 
              *,
              ROW_NUMBER() OVER(PARTITION BY COUNTRY,STATE ORDER BY CITY ) AS STATE_NO
        FROM 
             Grouped_by_Country
    
    ) ,
    
    Result AS (
    
        SELECT 
              CASE WHEN COUNTRY_NO = 1
                   THEN COUNTRY
                   ELSE ''
              END AS COUNTRY,
    
              CASE WHEN STATE_NO = 1
                   THEN STATE
                   ELSE ''
              END AS STATE,
    
              CITY,
              COUNTRY_NO,
              STATE_NO
    
    )
    
    SELECT 
          COUNTRY,
          STATE,
          CITY
    
    FROM 
          Result 
    ORDER BY 
          COUNTRY_NO,
          STATE_NO
    

    【讨论】:

    • 这实际上是标准 SQL,没有特定于 SQL Server 的内容(除了开头的语句终止字符)
    • @a_horse_with_no_name 我对 mysql 中的 case expression when condition then result1 else result 2 语法感到困惑。现在我才知道表达式部分是可选的。谢谢:)
    猜你喜欢
    • 2022-12-05
    • 2015-07-03
    • 1970-01-01
    • 2022-08-21
    • 2011-08-30
    • 2019-01-28
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多