2014-03-13 21 views
1

我有一个表名Demodata其中有两列col1和col2。表中的数据是DISTINCT只有一列和其他列随机?

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

选择命令后,我们需要这个数据

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

这可能又是什么查询请指导我

+1

几乎可以肯定会在任何代码是*接收*这个结果更容易实现组。 –

+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

第一列似乎是一个“int”列。 –

0

不,这是不可能的。

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

您可以做的是将col1分组,然后对col2(可能为STUFF函数)的值运行聚合函数。

+0

为什么不可能?不要混淆树结构 –

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中完成,但通常最好在客户端执行这些类型的操作。

+0

我认为这个问题更多的是以树形格式获取数据,而不是仅仅摆脱第一列值。 –

+0

@MoslemBenDhaou。 。 。我不知道你为什么在阅读这个问题。我认为理想的结果非常明确,我没有看到任何暗示问题树形结构的东西。 –

+0

我认为第二栏的排序不是OP所要的,因为他在标题中明确指出第二栏应该是“随机的”。 –

0

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

我相信NULL,您可以col1使用CTE与ROW_NUMBERCASE

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