我有一个表名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
这是可能的那么查询请指导我
答案 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
上使用CASE
和col1
的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