Comment faire deux loggings d'un?

J'ai des dossiers avec ce qui suit:

Id Date MondayMorning MondayEvening TuesdayMorning, and so on 1 2012-01-01 2 3 2 2012-01-01 2 2 

Je veux séparer l'logging 1 en deux loggings parce que les états de lundi et de lundi ne sont pas les mêmes. Si l'état est le même, ne faites rien.

Le résultat que j'attends:

 Id Date MondayMorning MondayEvening TuesdayMorning 1 2012-01-01 2 NULL 2 1 2012-01-01 NULL 3 2 2 2012-01-01 2 2 

S'il vous plaît callbackez-vous que les autres jours peuvent également varier.

Comment puis-je faire ceci?

Je ne comprends pas complètement la sortie dont vous avez besoin, mais le script suivant vous donnera tous les loggings dans la table, puis tous les loggings avec MondayMorning et MondayEvening qui ne correspondent pas.

 SELECT * FROM table UNION ALL SELECT * FROM table WHERE table.MondayMorning <> table.MondayEvening 

@Ahmet Essayez ceci pour get la valeur NULL dans les colonnes

 SELECT id ,date ,MondayMorning ,(CASE WHEN table.MondayEvening <> table.MondayMorning THEN NULL ELSE MondayEvening END) AS MondayEvening ,TuesdayMorning ,(CASE WHEN table.TuesdayEvening <> table.TuesdayMorning THEN NULL ELSE TuesdayEvening END) AS TuesdayEvening FROM table UNION ALL SELECT id ,date ,NULL AS MondayMorning ,MondayEvening ,NULL AS TuesdayMorning ,TuesdayEvening FROM table WHERE table.MondayMorning <> table.MondayEvening OR table.TuesdayMorning <> table.TuesdayEvening 
 select id, date, mondaymorning as monday from yourtable union select id, date, mondayevening as monday from yourtable 

(Une union supprimera les duplicates par défaut)

Ou plus génériquement

 select distinct id, [date], value from yourtable unpivot (value for day in (mondaymorning, mondayevening, ....)) u 

Puisque vous n'avez pas spécifié ce qui est votre sortie nécessaire, je suis venu avec le ci-dessous. Faites-nous savoir votre production réelle

 Declare @t Table(Id int identity,[Date] Datetime,MondayMorning Int,MondayEvening Int) Insert Into @t Select '2012-01-01',2,3 Union All Select '2012-01-01', 2,2 ;With Cte As (Select Id , [Date], MondayMorning, MondayEvening, [Status] = Case When MondayMorning = MondayEvening Then '0' Else '1' End From @t) Select Id,[Date],MondayMorning,MondayEvening From Cte Where [Status] = 0 Union All Select Id,[Date],MondayMorning,Null From Cte Where [Status] = 1 Union All Select Id,[Date],Null,MondayEvening From Cte Where [Status] = 1 

entrez la description de l'image ici

 Select * from empmas where compcd=1 and empcd =0001 connect by level <=2; 

Récupère l'employé 0001 Détails et a créé deux loggings de cet logging récupère.