【问题标题】:Select only distinct columns仅选择不同的列
【发布时间】:2015-11-02 01:15:30
【问题描述】:

我有表 T 并且只想选择不同的列(字段之间没有相关性)

F1  F2  F3
 1   A   AA
 1   B   BB
 2   B   CC
 2   C   DD
 2   C   EE
 3   C   EE

想要的输出

 F1   F2   F3
 1    A    AA
 2    B    BB
 3    C    CC
 null null DD
 null null EE

我试试

select T.F1, T1.F2 from
(select distinct F1, row_num() rn from T) T
left join (select distinct F2, row_num() rn from T) T1 on T.rn=T1.rn1
left join etc...

能不能简单点?

【问题讨论】:

  • 您想要的输出对 distinct 没有意义,因为唯一的非不同行是 2 C
  • @Maxrem 我在您的示例中看不到任何模式,这没有意义,您编辑之前的两列示例可能是相关的,可以通过使用 row_number 来实现
  • 我不需要字段之间的模式或相关性
  • @Maxrem 完全没有意义。

标签: sql sql-server select sql-server-2005 distinct


【解决方案1】:
**Example for two columns.** 
SELECT t1.f1, t2.f2
    FROM
    (
    SELECT ROW_NUMBER() OVER(ORDER BY f1) AS num, f1 FROM
    (
    SELECT DISTINCT f1 FROM T
    ) AS t1
    ) AS t1
    FULL JOIN 
    (
    SELECT ROW_NUMBER() OVER(ORDER BY f2) AS num, f2 FROM
    (
    SELECT DISTINCT f2 FROM T
    ) AS t2
    ) AS t2 ON t2.num = t1.num 

【讨论】:

  • 谢谢,我用这个方法
【解决方案2】:

输入:

F1  F2
1   A
1   B
2   B
2   C
2   C
3   C

期望的输出:

F1  F2
1   A
2   B
3   C

根据提供的输入,这也会产生所需的输出:

SELECT F1, MIN(F2) AS F2
FROM T
GROUP BY F1;

【讨论】:

  • @TimSchmelter 你是什么意思?
  • @Maxrem 那样真的没有意义。
  • 我不需要字段之间的模式或相关性
猜你喜欢
  • 1970-01-01
  • 2017-04-16
  • 2021-12-29
  • 2013-12-22
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
相关资源
最近更新 更多