SQL - 多个条目在 c1 中显示一个实例及其在 c2 中的对应映射

标签 sql sql-server sql-server-2008-r2

从三个表中,使用内连接,我的结果如下所示:

╔═══════╦═══════╦═══════╗
║ t1.c1 ║ t2.c1 ║ t3.c1 ║
╠═══════╬═══════╬═══════╣
║  1a   ║  2a   ║  3a   ║
║  1a   ║  2b   ║  3b   ║
║  1a   ║  2c   ║  3c   ║
║  1b   ║  2a   ║  3a   ║
║  1b   ║  2b   ║  3b   ║
║  1b   ║  2c   ║  3c   ║
╚═══════╩═══════╩═══════╝

有可能变成下面这样吗?

╔═══════╦═══════╦═══════╗
║ t1.c1 ║ t2.c1 ║ t3.c1 ║
╠═══════╬═══════╬═══════╣
║  1a   ║  2a   ║  3a   ║
║       ║  2b   ║  3b   ║
║       ║  2c   ║  3c   ║
║  1b   ║  2a   ║  3a   ║
║       ║  2b   ║  3b   ║
║       ║  2c   ║  3c   ║
╚═══════╩═══════╩═══════╝

这是我正在使用的代码:

SELECT t1.c1, t2.c1, t3.c1
FROM t1
  INNER JOIN t2
    ON t1.c1=t3.c1
  INNER JOIN t3
    ON t3.c1=t2.c1
WHERE t1.c2 = 'n'
ORDER BY t1.c1 ASC

最佳答案

我想你可以用这个:

SELECT     CASE WHEN ROW_NUMBER() OVER (PARTITION BY t1.c1 ORDER BY t2.c1,t3.c1) = 1 THEN t1.c1 END, 
           t2.c1, t3.c1
FROM       t1
CROSS JOIN t2
INNER JOIN t3
ON         t3.c1 = t2.c1
ORDER BY   t1.c1

关于SQL - 多个条目在 c1 中显示一个实例及其在 c2 中的对应映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31242122/

相关文章:

sql - 在 postgres 中选择/显示最后插入的序列号

mysql - 从具有多个条件的数据库中获取数据

sql-server - 为什么主键顺序很重要?

sql - 使用 SELECT 结果作为其他 SELECT 中的 COLUMN 名称

mysql - Postgres 缓慢且延迟的插入

sql-server - SQL Server 区分大小写的数据库名称

sql-server - 从外部系统生成的主键

SQL:即使不是全部都被执行,我怎样才能确保所有 SELECT Cases 都被表示出来?

sql - 当您执行 `SELECT *` 时,SQL Server 如何确定列的顺序?

sql-server - 无法通过实例名称连接到 SQL Server 2008 R2?