2017-09-26 7 views
0

j'ai une table comme ce qui suitvaleur en double impression sql seulement un temps

bill_id  sonvinid tid date     brandname 
1000109201701 13413 1 2015-10-03 00:00:00.000 QED - TM 
1000109201701 13741 1 2015-10-13 00:00:00.000 QED - TM 
1000109201702 14258 1 2015-11-05 00:00:00.000 QED - TM 

maintenant je veux exécuter une requête dans laquelle bill_id ne doit pas répéter, et la colonne répétée avec la même bill_id doit être indiquée comme nulle

bill_id  sonvinid tid date     brandname 
1000109201701 13413 1 2015-10-03 00:00:00.000 QED - TM 
       13741 1 2015-10-13 00:00:00.000 QED - TM 
1000109201702 14258 1 2015-11-05 00:00:00.000 QED - TM 

je sais que je ne peux pas utiliser ici distincte

alors, que la requête sera le mieux pour exécuter ce type de commande select?

+0

Cela devrait être fait à l'avant, et non pas dans votre requête. Vous pouvez le faire dans t-sql en utilisant LAG si vous voulez vraiment faire cela. https://docs.microsoft.com/en-us/sql/t-sql/functions/lag-transact-sql –

+0

Copie possible de [comment obtenir un résultat d'une requête où les premières colonnes ne répètent pas leur valeur ça change] (https://stackoverflow.com/questions/45083861/how-to-get-a-result-from-a-query-where-the-first-columns-do-not-repeat-their-val) – GuidoG

Répondre

2
SELECT CASE WHEN row_num = 1 THEN bill_id ELSE NULL END AS bill_id 
    , sonvinid 
    , tid 
    , date 
    , brandname 
    FROM 
     ( SELECT bill_id 
       , ROW_NUMBER() OVER (PARTITION BY bill_id ORDER BY date ASC) row_num 
       , sonvinid 
       , tid 
       , date 
       , brandname 
      FROM table1 
     ) a; 

Quoi qu'il en soit je suis d'accord avec le commentaire de Sean, que cela doit être fait sur le côté de l'interface utilisateur

+0

upvoted, mais vous ne savez jamais comment ils se sont chargés – LONG

+0

@LONG que voulez-vous dire? –

+0

Les données pouvaient soit être chargées à partir de l'extrémité frontale, soit être chargées via des outils de données tels que SSIS, etc. – LONG