sql - 选择已分组的 2 条记录,然后将它们并排放置在 2 列中

标签 sql sql-server database pivot

在表格中我们有学校的数据:

 ID | Name | City
------------------  
  1    A     X          
  2    B     X    
  3    C     Z
  4    D     Z

我想要同一城市的每两所学校的列表:

Name1 | Name2
--------------  
  A      B          
  C      D    

我选择的是同城的学校:

 SELECT Name FROM Schools
    Group by City
    Having City = City

正确吗?如何将 2 所匹配的学校放在一张新 table 上并排?

谢谢

最佳答案

更新另一种方法

如果您坚持分组,可以这样做的一种方法

SELECT City,
       MIN(Name) Name1,
       MAX(Name) Name2
  FROM Schools
 GROUP BY City
-- HAVING COUNT(*) > 1

另一种方式

SELECT City,
       MIN(CASE WHEN rnum = 1 THEN Name END) Name1,
       MIN(CASE WHEN rnum = 2 THEN Name END) Name2
  FROM
(
  SELECT s.*, ROW_NUMBER() OVER (PARTITION BY City ORDER BY Name) rnum
    FROM Schools s
) q
 GROUP BY City

示例输出:

| CITY | NAME1 | NAME2 |
------------------------
|    X |     A |     B |
|    Z |     C |     D |

这里是SQLFiddle 演示

关于sql - 选择已分组的 2 条记录,然后将它们并排放置在 2 列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18219618/

相关文章:

c# - 想要从下拉列表中的日期中删除时间?

sql - oracle sql从行到列

c# - 如何从使用 exec() 的存储过程创建复杂类型?

sql - SELECT 子句中的计算可以在应用 WHERE 谓词之前执行吗?

database - 私信数据库设计

sql - 在 SQL SELECT 语句中找不到 UDF

c# - Entity Framework 代码优先和 SQL Server 2012 序列

mysql - 在 MySQL 练习中对日期使用 != 时得到错误的结果集

sql - 使用 cte 时获取额外日期

ios - 跨客户端的 Realm 同步