2016-08-20 92 views
0

使用SQL Server 2014,我有一個非常大的表,我需要獲得每列的唯一項目列表之類的東西,我不需要考慮彼此之間的關係。就像我會在不同的表格中清除每一列一樣。但我需要在一張桌子上得到結果。初始數據的SQL Server中的1個表中的每列的唯一結果

例子:

Project | Status | Employees | 
----------------------------------- 
Project 1 | Active |  10 | 
Project 2 | Closed |  10 | 
Project 3 | Closed |  20 | 
Project 1 | Active |  20 | 
Project 2 | Closed |  20 | 

請求的數據,在這裏我需要每列只有唯一的結果。

Project | Status | Employees | 
----------------------------------- 
Project 1 | Active |  10 | 
Project 2 | Closed |  20 | 
Project 3 |   |   | 
      |   |   | 

如果可能希望獲得語法幫助。

+1

這不是簡單地使用'GROUP BY'和'SUM'在查詢?你到目前爲止嘗試過什麼來實現你的目標? –

+0

可以在每列執行GROUP BY/DISTINCT和ROW_NUMBER時使用單獨的Select。然後所有的選擇都必須完全外連接。當然,這對於一個真正大桌子來說是非常大的開銷。但爲什麼你想要這樣的結果?這不是一張桌子,它只是一堆非相關的價值觀。 – dnoeth

+0

我需要在ssrs報告中獲得過濾器數據的這些結果。如果它對你來說不難,你可以使用查詢的例子。 – Dmitry

回答

1

這是一種痛苦,因爲結果集不是關係形式:每行中的列彼此不相關。但是,你可以做到這一點,利用row_number()以及一個full outer join或聚集:

select p.project, s.status, e.employees 
from (select project, row_number() over (order by (select null)) as seqnum 
     from t 
     group by project 
    ) p full outer join 
    (select status, row_number() over (order by (select null)) as seqnum 
     from t 
     group by status 
    ) s 
    on p.seqnum = s.seqnum full outer join 
    (select employees, row_number() over (order by (select null)) as seqnum 
     from t 
     group by project 
    ) e 
    on e.seqnum = coalesce(p.seqnum, s.seqnum); 
+0

戈登,thx很多,它很好,你是我的英雄:) – Dmitry

相關問題