2011-10-12 6 views
-2

J'ai une table appelée loc a des attributs locid, sid, rôle, lien, href. Je dois extraire tous ceux-ci pour le super lien ID 1,2,3,4,5,6,7,8,9 Mais 3 a deux locid 3 & 4. Je dois extraire le contenu de 3 et 4. Mais mon sid ne devrait pas répéterbesoin de requête pour la table suivante

   Locid   Sid 
      1     1 
      2    2 
      3    3 
      4    3 
      5    4 
      6    7 
      7    7 
      8    7 
      9    8 
      10    8 
      11    4 
      12    4 
      13    9 
      14    4 

mon eteint devrait être sous cette forme

  Sid  locid 
      1  1 
      2  2 
      3  3 
        4 

      4  5 
        11 
        12 
        14 

      7   6 
         7 
         8 

      8   9 
         10 

      9   13 
+1

Le travail de votre application consiste à formater différemment (masquer le Sid répétitif), pas au serveur SQL. Ils ne le font vraiment pas proprement. –

+0

select * from Loc où sid = Locid; il ne me donne que 4 lignes – user977830

Répondre

0

Eh bien votre résultat n'est pas une table 2 dimensions propres de sorte que vous auriez à rouler la Locid en une seule valeur . MySql fournit la fonction GROUP_CONCAT:

Je n'ai pas testé, mais quelque chose comme:

SELECT sid, GROUP_CONCAT(locid SEPARATOR ', ') FROM mytable GROUP BY sid 

cela se traduirait par:

1 1, 
2 2, 
3 3, 4 
4 5, 11, 12, 14 
+0

'CONCAT' n'est pas un nom de fonction intégré reconnu. donnez-moi l'erreur – user977830

+0

Voir la mise à jour de la réponse. –

+0

monsieur utilise SQL Server 2005 ... 'GROUP_CONCAT' n'est pas un nom de fonction intégré reconnu. – user977830

0

Je ne comprends pas si vous voulez garder le vide espaces ou supprimer où les valeurs Sid sont dupliquées. Cela devrait vous donner seulement des lignes pour les valeurs sid uniques

SELECT sid, locid FROM mytable GROUP BY sid; 

Si vous avez une grande quantité de données, vous pouvez sélectionner et insérer dans une autre table ou dans un fichier texte

CREATE TABLE temp LIKE mytable; 
INSERT INTO temp 
SELECT sid, locid FROM mytable GROUP BY sid; 
DROP mytable; 
ALTER TABLE temp RENAME mytable; 

ou que l'on à sortie dans un fichier texte:

SELECT sid, locid FROM mytable GROUP BY sid 
INTO OUTFILE 'C:/myfolder/mytextfile.txt'; 

lui donner un essai et mettre à jour votre message :)

1
select 
    sid = case when rn1 = 1 then sid end, 
    locid 
from 
(
    select 
     sid, 
     locid, 
     rn1 = row_number() over(partition by sid order by locid), 
     rn2 = row_number() over(order by sid, locid) 
    from tablename 
) t 
order by rn2 
Questions connexes