2017-08-17 5 views
1

私のジレンマは、このようになります比較しながら同様の行をマージ:SQL:バージョン

 FileName Version Type Doc_Number Owner Request Date 
1. ECN 0001  3  ECN  NULL  NULL  NULL  NULL 
2. ECN 0001  1  NULL  NULL  NULL  NULL  2017-08-14 
3. ECN 0001  2  NULL  NULL  NULL  NULL  08/14/17 
4. ECN 0001  2  NULL  NULL  NULL  NULL  NULL 
5. ECN 0001  2  NULL  NULL  JOHN  NULL  NULL 
6. ECN 0001  1  NULL  Form  NULL  NULL  NULL 
7. ECN 0001  2  NULL  0001  NULL  NULL  NULL 
8. ECN 0002 ect... 
N. ECN 9999 ect... 

ファイルのリストをそのソリューションは、ファイル名の変更を考慮に入れる必要があります長いです、私は1つの行に重複したファイル名を凝縮したいです。場合によっては、同じファイルの行または列に複数の値が含まれることがあります。

上記のように、1つのバージョンにつき最大1つの列値しかないことがルールです。たとえば、ECN 0001バージョン1の日付は1つのみですが、バージョン2の別の日付が表示されます。バージョン3は最新のバージョンですが、v2からv3への唯一の変更はタイプでした。

は、私は新しいリストは次のようになりたい:

主なアイデアは、新しいリストが最新のバージョンからのすべての情報をファイルごとに1つの行に凝縮されていること
 FileName LatestVersion Type Doc_Number Owner Request Date 
1. ECN 0001   3   ECN  0001  JOHN  NULL  08/14/17 
2. ECN 0002   6   PGT  0002  BOB  JAKE  08/14/17 
3. ECN 0003   2   ECN  0003  KYLE  BOB  08/14/17 
4. ECN 0004   4   ECN  0001  TOM  BILL  08/14/17 
5. ECN 0005   8   ECN  0001  KATE  KELVIN 08/14/17 
6. ECN 0006   2   ECN  0001  STEVE  JOHN  08/14/17 
7. ECN 0007   5   ECN  0001  JOHN  STEVE  08/14/17 
n. ECN 9999   99   EXR  9999  CHERYL CARL  09/14/26 

、それはすることができることをいくつかの値バージョン1または2以降は変更されていないため、最新バージョンのテーブルには表示されます。ファイルごとに複数の値が存在する場合は、最新の値を使用する必要があります。また、ECN 0001リクエストの場合のように、どのバージョンにも情報が存在しない可能性があります。

私はmaxを使うと考えましたが、最新の値が必ずしも最大の値ではないため、古いデータを切り捨てるときに、データのバージョン番号を考慮する必要があります。それは場合に役立ちます

これは私の現在のコードです:

select FileName, Version, 
(case when VariableName = 'Document Type' then ValueText end) as Type, 
(case when VariableName = 'Document Number' then ValueText end) as Doc_Number, 
(case when VariableName = 'Owner' then ValueText end) as Owner, 
(case when VariableName = 'Requested By' then ValueText end) as Request, 
(case when VariableName = 'Date Written' then ValueText end) as Date 
FROM 
(
SELECT Documents.Filename,VariableValue.ValueText,VariableValue.Version,Variable.VariableName 
FROM Documents INNER JOIN VariableValue ON Documents.DocumentID = VariableValue.DocumentID INNER JOIN Variable ON VariableValue.VariableID = Variable.VariableID 
WHERE Filename LIKE 'ECN_____.pdf' AND Filename <> 'ECN Form.PDF' 
) t 
Order by Filename 
+1

どのようなSQLのフレーバーを使用していますか? – scsimon

+1

使用しているデータベースで質問にタグを付けてください。 –

+0

こんにちは、SQL Server 12.0.5203​​.0でタグ付けしようとしました – Jsaville

答えて

0

純粋なSQLソリューションのための私が見る唯一のオプションはuser defined aggregate functionです。それらが提供するsampleがあります。

これは、clr互換言語でコードを記述し、結果dllをSQL Serverフォルダにコピーすることを含みますが、SQL Serverに接続するアプリケーションの観点からは、純粋なSQLソリューションのように見えます。

+0

これはかなり強力です、この方向に私を指摘して、私がそれについて学ぶことができ、戻って報告することができます。 – Jsaville

関連する問題