DISTINCT只有一列和其他列随机?

时间:2014-03-13 10:54:05

标签: sql sql-server-2008

我有一个表名Demodata,它有两列col1和col2。表的数据是

col1   col2    
1        5  
1        6    
2        7    
3        8    
3        9    
4        10

SELECT 命令之后我们需要这个数据

col1    Col2    
1        5    
         6    
2        7   
3        8   
         9   
4        10

这是可能的那么查询请指导我

4 个答案:

答案 0 :(得分:0)

试试这个

    SELECT CASE WHEN RN > 1 THEN NULL ELSE Col1 END,Col2
    FROM
    (
    SELECT *,Row_Number() Over(Partition by col1 order by col1) AS RN
    From yourTable
    ) AS T

答案 1 :(得分:0)

不,这是不可能的。

SQL Server结果集基于行而非基于树。每列必须有一个值(或者是NULL值)。

您可以做的是按col1进行分组,并对col2(可能是STUFF函数)的值运行汇总函数。

答案 2 :(得分:0)

可以在SQL中使用row_number()

执行此操作
select (case when row_number() over (partition by col1 order by col2) = 1
             then col1
        end), col2
from table t
order by col1, col2;

请注意,排序很重要。您编写结果集的方式是,数据按col1排序,然后按col2排序。除非您包含order by子句,否则结果集没有固有的顺序。

另外,我使用NULL作为缺失值。

最后,虽然这可以在SQL中完成,但通常最好在客户端进行这些类型的操作。

答案 3 :(得分:0)

您想在重复项上选择什么,空字符串NULL,0,...?

我假设NULL,您可以在ROW_NUMBER上使用CASEcol1的CTE:

WITH CTE AS(
  SELECT RN = ROW_NUMBER() OVER (PARTITION BY col1 
                               ORDER BY (SELECT 1))
        , col1, col2
  FROM Demodata 
)
SELECT col1 = CASE WHEN RN = 1 THEN col1 ELSE NULL END, col2
FROM CTE

Demo