我有一個表名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
幾乎可以肯定會在任何代碼是*接收*這個結果更容易實現組。 –
除報告數據外; –