2016-08-20 91 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

相关问题