J'essaie de sélectionner tous les enregistrements d'un jeu de données où 1 des enregistrements répond à un critère. J'ai une table de données contenant les heures travaillées par une personne de jour. J'ai besoin de sélectionner tous les enregistrements d'une personne pour cette semaine, si un enregistrement de cette semaine a le drapeau "enregistré" défini sur "N". Voici un exemple de données:
T_HOURS: P>
SELECT * FROM t_hours WHERE (Name = (SELECT t1.Name FROM t_hours t1 where t1.Name = t2.Name and t1.Week = t2.Week and t1.Logged = 'N') and Week = (SELECT t2.Week FROM t_hours t2 where t1.Name = t2.Name and t1.Week = t2.Week and t2.Logged = 'N')
4 Réponses :
Essayez comme ci-dessous en utilisant Exists
Est-ce ce que tu veux?
Merci pour votre commentaire, mais je ne pense pas que cela soit acceptable dans SQL Server. La clause WHERE de "Nom, Workweek" ne fonctionne pas. Est-ce que je manque quelque chose?
Quelle est l'erreur que vous avez? Si cela ne fonctionne pas, il existe une utilisation
Une expression de type non booléen spécifié dans un contexte où une condition est attendue, près de ','
Il existe de bons résultats retournés, mais encore une fois, merci pour votre aide!
Non, en utilisant deux champs avec un opérateur dans une clause où la clause ne fonctionne pas. Mais utiliser existe existe du travail.
Données de retour:
UPDATE t_hours SET logged = 'N' WHERE EXISTS (SELECT 1 FROM t_hours t2 WHERE t1.NAME = t2.NAME AND t1.week = t2.week AND t2.logged = 'N');
Merci! Cela fonctionne pour ce dont j'avais besoin! Gentil et propre, marquage comme répondu
Vous pouvez utiliser une UPDABLE CTE:
with toupdate as ( select t.*, min(logged) over (partition by name, week) as min_logged from t ) update toupdate set logged = min_logged where min_logged = 'N' and min_logged <> logged;
C'est une réponse vraiment propre, Gordon. Est-ce que min_loggeggeggeging ne fonctionne que parce qu'il y a deux options, par exemple N / y, ou fonctionnerait-il toujours s'il y avait des valeurs supplémentaires? Je suppose que cela ne fonctionne que si les valeurs sont en ordre croissant / décroissant, respectivement.
@Sanbrookins. . . min () code> est une commodité dans ce cas car elle prend deux valeurs. Une légère variation peut être utilisée s'il y a plus de valeurs, en fonction des circonstances.