2016-08-20 2 views
0

SQL Server 2014を使用すると、各列の一意の項目のリストなどを取得する必要がある非常に大きな表があります。異なるテーブルの各列を区別する場合と同じです。しかし、私は1つのテーブルに結果を得る必要があります。初期データの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

これではありません。しかし、あなたはrow_number()full outer joinまたは凝集のいずれかを使用することによって、それを行うことができますか?あなたの目標を達成するためにこれまでに何を試みましたか? –

+0

GROUP BY/DISTINCTとROW_NUMBERを実行する各列で別々のSelectを使用することは可能です。そして、それらのすべての選択は完全外結合でなければなりません。もちろん、それは*本当に大きなテーブル*上の本当に大きなオーバーヘッドになります*。しかし、なぜあなたはそのような結果を望んでいますか?それはテーブルではなく、単なる関連性のない値です。 – dnoeth

+0

ssrsレポートでフィルタデータの結果を取得する必要があります。それはあなたのために難しくない場合は、plzは、あなたのクエリの例を作成します。 – Dmitry

答えて

1

結果セットがリレーショナル形式ではないため、これは痛みです。各行の列は相互に関連していません。単に `GROUP BY`とクエリで` SUM`を使用して

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

関連する問題