2017-08-17 55 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... 

文件的清單很長,因此該解決方案應考慮到不斷變化的文件名,我想重複的文件名凝結成一排。有時數據在同一個文件的行或列中會有多個值。

一條規則是每個版本最多隻能有一列值,如上所示,例如ECN 0001版本1僅列出一個日期,但版本2可以列出另一個日期。版本3將是最新版本,但從v2到v3的唯一更改是該類型。

我希望新的列表看起來像這樣:

 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