2014-03-13 28 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