6
votes

Query SQL pour "Concaténate On Rejoignez"

J'utilise une base de données STRAND> SYBASE ASE STRAND>.
J'ai deux tables qui ressemblent à:

Table Magasins Code>: P>

-----------------------------------------------------
| ShopName | Sweets                                 |
-----------------------------------------------------
| Sweetie  | lolly, redlolly, greenlolly            |
| Candie   | taffy, redtaffy, bluetaffy             |
| Sugarie  | choco, mintchoco, milkchoco, gummybees |
-----------------------------------------------------


4 commentaires

HMM sonne comme si vous souhaitez une fonction d'agrégation de chaîne. Je ne suis pas sûr de quelles bases de données qui le font de manière native, mais je vois des soins voir des fonctions définies par l'utilisateur pour cela (NATUARLLY qui varie d'un DMB à l'autre). Quelle base de données utilisez-vous?


Quelles erreurs ont fait liste () donner? Non pas que je puisse vous aider avec les problèmes de sybase, mais une autre personne qui peut reconnaître le message d'erreur.


L'erreur était que la fonction () n'a pas été trouvée, et à juste titre: j'utilise Sybase ASE Edition, qui n'a pas cette fonction (sa documentation le dit). Cela aura probablement besoin de quelque chose de T-SQL Mumbo Jumbo, je suppose, mais je n'ai aucune idée de la façon de faire ça ..


La fonction Liste () ne fonctionne que pour Sybase IQ et non pour Sybase ane .


5 Réponses :


5
votes

Vous devrez spécifier ce que vous utilisez le SGBD.

MySQL's Concat de groupe est exactement ce dont vous avez besoin. P>

SELECT ShopName, GROUP_CONCAT(SweetName SEPARATOR ", ")
FROM Shops a
JOIN Sweets b
ON a.ShopID = b.ShopID
GROUP BY ShopName


3 commentaires

Et oracle a wmsys.wm_concat , bien qu'il semble être non documenté. Je ne l'ai jamais utilisé moi-même, mais je l'ai trouvé assez rapidement. Une autre solution Oracle utilisant Connect par : halisway.blogspot.com/2006/08/...


J'ai besoin de le faire avec Sybase Ase, donc cela ne fonctionnera pas pour moi ... Sybase a une fonction de liste () qui le fait, mais elle n'est pas présente dans l'édition ASE.


Mon Google-Fu révèle ce lien ( projecteurdmx.com/tsql/rowconcatenate.aspx ) . Pouvez-vous convertir cela au SQL, dont vous aurez besoin dans mon cas?



1
votes

J'ai testé cela sur SQL Server, mais j'espère que cela fonctionnera également sur Sybase. Sinon, peut-être que cela vous mènera assez près de la résoudre.

Si je crée cette fonction: xxx

i peut ensuite exécuter cette requête et obtenir les résultats que vous voulez : xxx

espère que cela aide.


1 commentaires

Je suis ici ayant le même problème. Pour moi (Sybase ASE 15.0) qui ne fonctionne pas. Pour une raison quelconque, il ne renvoie que la dernière ligne. Est-ce une version dépendante de la version? Ou un cadre?



2
votes

C'est une requête de crosseb et il est impossible avec Sybase Abe dans une requête.

Vous pouvez créer une procédure stockée avec une table temporaire, le remplir avec du curseur et sélectionnez à partir de cette table temporaire.


0 commentaires

1
votes

Malheureusement, une méthode de La réponse de Adrift's Ne fonctionne pas avec Sélectionner une instruction pour Sybase ASE, variable @List Don ' T Mise à jour de chaque ligne, cela ne fonctionne que pour la dernière ligne. Mais étant donné que la mise à jour fonctionne pour chaque rangée et la taille de la table, vous ne pouvez pas le faire avec la déclaration de mise à jour. Petit exemple:

    declare @list varchar(500)

    update Sweets
    set @list = @list + SweetName + ', ' 
    where ShopID = 1

    select SUBSTRING(@list, 1, Len(@list) - 2)


0 commentaires

0
votes

fonctionne dans Sybase ASE ...

SELECT ShopName, dbo.SweetsList(ShopName) AS Sweets FROM Shops


0 commentaires