mon dilemme ressemble à ceci:SQL: Fusion des lignes similaires en comparant les versions
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...
La liste des fichiers est longue de sorte que la solution doit prendre en noms de fichiers de changement de compte, je souhaite condenser les noms de fichiers en double en une seule ligne. Parfois, les données auront plus d'une valeur dans une ligne ou une colonne pour le même fichier. Une règle est qu'il ne peut y avoir qu'une seule valeur de colonne par version comme indiqué ci-dessus, par exemple ECN 0001 version 1 n'a qu'une seule date répertoriée, mais la version 2 peut avoir une autre date répertoriée. La version 3 serait la dernière version mais la seule modification apportée de v2 à v3 était le type.
Je veux la nouvelle liste pour ressembler à ceci:
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
L'idée principale est que la nouvelle liste est condensé à une ligne par fichier avec toutes les infos de la dernière version, il se peut que certaines valeurs sont inchangés depuis la version 1 ou 2 et devraient donc apparaître toujours dans la dernière version du tableau. Si plus d'une valeur est présente par fichier, la dernière doit être utilisée. Il est également possible qu'aucune des versions n'ait les informations présentes comme dans le cas de ECN 0001 Request.
Je pensais utiliser max, mais la valeur la plus récente n'est pas toujours la plus grande valeur, donc la décision doit vraiment prendre en compte le numéro de version des données lors du découpage de données plus anciennes.
Ceci est mon code actuel si elle aide:
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
Quelle est la saveur de SQL avec laquelle vous travaillez? – scsimon
Marquez votre question avec la base de données que vous utilisez. –
Salut j'ai essayé de le marquer avec SQL Server 12.0.5203.0 – Jsaville