6
votes

SQL Server Convertir des colonnes en lignes

J'ai une table SQL avec la valeur actuelle et la valeur précédente.

Id  Column  Value   Pvalue
1   Value2  V       V1
2   Value1  B       B1
2   Value2  W       W1
3   Value1  C       C1


0 commentaires

4 Réponses :


6
votes

Voici un moyen facile:

SELECT  Id, 
        'Value1' [Column],
        Value1 Value,
        PValue1 PValue
FROM YourTable
WHERE ISNULL(Value1,'') != ISNULL(PValue1,'')
UNION ALL
SELECT  Id, 
        'Value2' [Column],
        Value2 Value,
        PValue2 PValue
FROM YourTable
WHERE ISNULL(Value2,'') != ISNULL(PValue2,'')


0 commentaires

10
votes

Vous pouvez utiliser un cross appliquer pour impucher les données: xxx

voir SQL violon avec la démo .

Juste parce que j'aime utiliser la fonction pivot , voici une version qui utilise à la fois l'impulsion / EM> et les fonctions pivot pour obtenir le résultat: xxx

voir SQL violon avec démo


1 commentaires

+1 parce que je ne savais pas que vous pourriez utiliser la croix s'appliquer de cette façon!



0
votes

Que diriez-vous d'utiliser un Union:

SELECT * FROM
    (SELECT Id, 'Value1' [Column], Value1 [Value], PValue1 [PValue]
    FROM table_name
    UNION ALL
    SELECT Id, 'Value2' [Column], Value2 [Value], PValue2 [PValue]
    FROM table_name)tmp
WHERE Value != PValue
ORDER BY Id


0 commentaires

0
votes

Enfin, et pour l'exhaustivité, il existe un Députation commande. Cependant, puisque vous avez deux colonnes que vous souhaitez improvoir, il serait probablement plus simple d'utiliser l'une des autres solutions.


0 commentaires