J'ai une table comme ci-dessous:
UPDATE a SET a.[TrackName] = 'All three' FROM Table1 as a INNER JOIN (SELECT [RequestNumber], row_number() OVER (ORDER BY [RequestNumber] DESC) as rowNumber FROM Table1 ) drRowNumbers ON drRowNumbers.[RequestNumber] = a.[RequestNumber] and drRowNumbers.[Date] = a.[Date]
4 Réponses :
Je pense que vous voulez Sélectionnez CODE> Éclèce:
SELECT t1.RequestNumber, (CASE WHEN COUNT(DISTINCT t1.TrackName) = t2.TrackNo
THEN CONCAT('All ', t2.TrackNo)
ELSE MIN(t1.TrackName)
END) AS TrackName, t1.Date
FROM table1 t1 CROSS JOIN
(SELECT COUNT(DISTINCT TrackName) AS TrackNo FROM table1) AS t2
GROUP BY t1.RequestNumber, t1.Date;
Essayez ceci. Cela reviendra "tous les 3" au lieu de "tous les trois" -
Ce n'est pas une mise à jour, c'est aussi une suppression.
Cela signifie que vous devez avoir un processus en deux étapes - une pour mettre à jour les enregistrements pertinents et la suivante pour supprimer les duplicats créés par la première étape.
Ceci peut être fait en utilisant quelques expressions de table communes qui utilisent des fonctions de fenêtre telles que premier, créez et peuplez une table d'échantillons ( s'il vous plaît fort> Sauvez-nous cette étape dans vos futures questions): p> Nombre () sur () code> et
row_number () sur () code>, quand les deux Les étapes sont jointes à l'intérieur d'une transaction. P>
RequestNumber TrackName Date
2209 Middle 28.05.2017 00:00:00
263 Middle 29.06.2017 00:00:00
633 Middle 10.09.2017 00:00:00
762 All Three 23.06.2017 00:00:00
1839 Middle 09.03.2017 00:00:00
Donnez ceci un ESSAYER
Étape 1 Définissez l'un des REC sur les trois P>
delete table1 where requestnumber in (select requestnumber from table1 group by requestnumber,[date] having count(*) = 3) and trackname <> 'All Three'
Vous voulez que les deux enregistrements avec 0762 restent là avec TrackName = 'Tous les trois'? ou veut aussi retirer la deuxième rangée?
Si "DemandeNumber" et "Date" correspondent (comme indiqué dans l'exemple), tous les enregistrements sont combinés pour fournir des chaînes "toutes les trois". Parce que le "nom de piste" n'a que 3 catagoires (c'est-à-dire le milieu, le dos et le devant).
Cela signifie que les 2 autres rangées devraient être supprimées, non?
Oui. Mais, la production devrait être comme indiqué.