2010-11-26 8 views
0

J'ai vueGrouper par date avec requête SQL?

ID S.No DateFr  DateTo 
--- ----- ------  --------- 
1 63 01/01/2010 01/01/2010 
1 63 01/01/2010 01/11/2010 
2 64 01/01/2010 01/01/2010 
2 64 01/01/2010 01/11/2010 
3 65 01/01/2010 01/01/2010 
3 65 01/01/2010 01/11/2010 

Maintenant, je veux des résultats comme

ID S.No DateFr  DateTo 
1  63 01/01/2010 01/11/2010 
2  64 01/01/2010 01/11/2010 
3  65 01/01/2010 01/11/2010 

Remarque Seul DateFr est modifié dans les dossiers, donc je veux qu'il passer d'être une ligne à la colonne. L'ID n'est pas fixe, il peut aller jusqu'à un illimité non comme 1,1,1 ------ 30,30,30. J'utilise DB2 avec ISeries.

Répondre

1
SELECT ID,S.No,dateFr,DateTo FROM your_table GROUP BY ID,S.No,dateFr,DateTo 
+1

simple GROUP BY est suffisant pourquoi aller pour le pivot? – Pratik

+1

Cela ne fonctionne pas. Il retourne 2 lignes où je veux seulement 1 ligne à la place de 1,1 –

+0

Je pense que cela ferait SELECT ID, S.No, dateFr, DateTo FROM your_table GROUPE PAR ID, S.No – Pratik

-1

Vous pouvez utiliser la commande SQL Server PIVOT.

Check this out

+0

J'utilise DB2 ISeries –

+0

Désolé. Eh bien, il est temps de passer à SQLServer! :) – franz976

+1

Peut-être qu'il est temps pour vous d'obtenir un livre sur SQL. –

3

Il devrait être aussi simple que quelque chose comme ceci:

select id, s.no, min(datefr), max(dateto) from your_table group by id, s.no 
+0

Merci Brandon, le seul problème étant que les lignes de l'ID 1 ne sont pas limitées à deux. La boîte peut aller de 4,5,6 --- n rangées. Donc, le min, max ne fonctionnera pas dans ce cas. J'ai besoin d'obtenir toutes les lignes dateTo dates dans une seule ligne dans différentes colonnes ou séparées par des virgules. –

+0

Pouvez-vous expliquer davantage vos données? De ce que vous dites je ne comprends pas pourquoi le SQL donné ne fonctionnera pas. –

+0

Merci, je l'ai eu à travailler par la suite Brandon. Désolé d'avoir mal interprété votre réponse. –

1

Utilisez Max(), Case When et Group By. À mon avis, cette technique s'appelait «Pivot» ou «Crosstab».