-1
votes

Mettre à jour une colonne lorsque plusieurs enregistrements d'une autre colonne de la même table correspondent

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 commentaires

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é.


4 Réponses :


0
votes

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;


0 commentaires

1
votes

Essayez ceci. Cela reviendra "tous les 3" au lieu de "tous les trois" - xxx


0 commentaires

0
votes

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 Nombre () sur () code> et row_number () sur () code>, quand les deux Les étapes sont jointes à l'intérieur d'une transaction. P>

premier, créez et peuplez une table d'échantillons ( s'il vous plaît fort> Sauvez-nous cette étape dans vos futures questions): 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


0 commentaires

0
votes

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'


0 commentaires