2010-12-08 7 views
0

Je dois obtenir plusieurs colonnes en forme sql query. Ensuite, je dois filtrer cette réponse par les valeurs "distinctes" d'une colonne, mais dans la sortie, j'ai besoin d'avoir toutes les colonnes, et non seulement les valeurs qui doivent être distinctes. Quelqu'un peut-il m'aider? L'ordre par clause n'est pas une réponse pour moi.Comment filtrer les lignes par les valeurs d'une colonne?

A,B,C,D 
E,F,G,H 
I,J,C,L 
M,N,Z,H 

Ci-dessus est une simple sortie de lignes. S'il vous plaît jeter un oeil sur la 3e colonne. Supposons que nous ne connaissions pas le nombre de lignes que nous avons. Je dois sélectionner seulement les lignes qui ont une valeur distincte dans la 3ème colonne. (C, G, Z) - Nous devons filtrer n'importe qui des rangées "C".

+0

Pouvez-vous poster votre requête et/ou la définition de la table? –

+1

Par exemple, les rangées 1 et 3 ont la valeur C dans la 3ème. colonne. Quelle rangée (1 ou 3) espériez-vous avoir dans votre résultat final, et pourquoi? –

+0

Je me fiche de savoir de quelles lignes j'ai besoin. L'un d'entre eux. – truthseeker

Répondre

3

J'ai arbitrairement choisi d'utiliser col1 pour rompre les liens sur col3. Vous pouvez ajuster la partie order by du partition selon vos besoins.

/* Set up test data */ 
declare @test table (
    col1 char(1), 
    col2 char(1), 
    col3 char(1), 
    col4 char(1) 
) 

insert into @test 
    (col1, col2, col3, col4) 
    select 'A','B','C','D' union all 
    select 'E','F','G','H' union all 
    select 'I','J','C','L' union all 
    select 'M','N','Z','H' 

/* Here's the query */ 
;with cteRowNumber as (
    select col1, col2, col3, col4, 
      row_number() over (partition by col3 order by col1) as RowNumber 
     from @test 
) 
select col1, col2, col3, col4 
    from cteRowNumber 
    where RowNumber = 1 

Retours

col1 col2 col3 col4 
---------------------------- 
A  B  C  D 
E  F  G  H 
M  N  Z  H 
0

ROLL UP ou CUBE pourrait être utile pour votre problème, car ils peuvent agréger (à savoir sous-total) des données sur la base du GROUP BY et revenir encore les lignes individuelles.

Questions connexes