我有一个表名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
这可能又是什么查询请指导我
我有一个表名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
这可能又是什么查询请指导我
试试这个
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
第一列似乎是一个“int”列。 –
不,这是不可能的。
SQL Server结果集是基于行而不是基于树的。您必须为每列有一个值(或者是NULL值)。
您可以做的是将col1
分组,然后对col2
(可能为STUFF
函数)的值运行聚合函数。
为什么不可能?不要混淆树结构 –
您可以在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中完成,但通常最好在客户端执行这些类型的操作。
我认为这个问题更多的是以树形格式获取数据,而不是仅仅摆脱第一列值。 –
@MoslemBenDhaou。 。 。我不知道你为什么在阅读这个问题。我认为理想的结果非常明确,我没有看到任何暗示问题树形结构的东西。 –
我认为第二栏的排序不是OP所要的,因为他在标题中明确指出第二栏应该是“随机的”。 –
你想在重复项上选择什么,一个空字符串,NULL
,0,...?
我相信NULL
,您可以col1
使用CTE与ROW_NUMBER
和CASE
:
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
几乎可以肯定会在任何代码是*接收*这个结果更容易实现组。 –
除报告数据外; –