Harkon Δημοσ. 4 Δεκεμβρίου 2007 Δημοσ. 4 Δεκεμβρίου 2007 καλησπέρα σας, έστω ότι έχω έναν πίνακα με τους πελάτες (ID,CNAME) Θα ήθελα ένα sql command που να μου επιστρέφει σε ένα ROW, τα αποτελέσματα του sql = "SELECT CNAME FROM CUSTOMER", comma seperated. Δηλαδή αντί για : CNAME --------- Νίκος Τάκης Γιώργος να παίρνω: Νίκος,Τάκης,Γιώργος υπάρχει κανείς που να γνωρίζει πως γίνεται αυτό; ευχαριστώ εκ των προτέρων
mvaggel Δημοσ. 4 Δεκεμβρίου 2007 Δημοσ. 4 Δεκεμβρίου 2007 Μόνο με DB function θα καταφέρεις κάτι τέτοιο...
Dikemou Δημοσ. 4 Δεκεμβρίου 2007 Δημοσ. 4 Δεκεμβρίου 2007 Σε mySQL: >SELECT GROUP_CONCAT(CNAME) AS names FROM CUSTOMER WHERE...
Christof Δημοσ. 4 Δεκεμβρίου 2007 Δημοσ. 4 Δεκεμβρίου 2007 Σε τι βάση δεδομένων θέλεις να το κάνεις?? Oracle, SQL Server, mySQL....
Bspus Δημοσ. 4 Δεκεμβρίου 2007 Δημοσ. 4 Δεκεμβρίου 2007 Δεν ξερω πως να φτιαξω ενα query Που να επιστρεφει δυναμικο αριθμο απο columns, ουτε αν ειναι δυνατο κατι τετοιο. Το επομενο δυνατο βημα ειναι να ορισεις ενα query που θα σχηματιζεται δυναμικα κανοντας ενα προκαταρτικο select και καποιο loop που θα το σχηματιζει τμηματικα με βαση τα αποτελεσματα. Αυτο ομως πρεπει να γινει μεσα απο διαδικασια η συναρτηση. Το πρωτο παραδειγμα που εδωσε ο Dikemou επιστρεφει μονο ενα column το οποιο αποτελειται απο ενα μεγαλο varchar (δηλαδη string) Αν ο αριθμος των ονοματων ειναι δεδομενος τοτε γινεται. Δηλαδη ο αριθμος των ονοματων που επιστρεφονται, ας υπαρχουν παραπανω στη βαση δε μας πειραζει. Αλλα να σου επιστρεψει ενα συγκεκριμενο αριθμο απο columns το query. Μπορεις να ψαξεις για crosstab queries στο google και ισως βρεις μονος σου τον τροπο, διαφορετικα κατι θα βρουμε. Αν βεβαιως σε καλυπτει αυτο
Dikemou Δημοσ. 5 Δεκεμβρίου 2007 Δημοσ. 5 Δεκεμβρίου 2007 Bspus, με μπέρδεψες. Με το query που πρότεινα, περιορίζεις τον αριθμό των ονομάτων στο "names" σε όσα θέλεις, ανάλογα τι θα δώσεις στο WHERE (και/ή LIMIT)... Άλλο κατάλαβα... ;
Harkon Δημοσ. 5 Δεκεμβρίου 2007 Μέλος Δημοσ. 5 Δεκεμβρίου 2007 καλημέρα σας, σας ευχαριστώ για τις απαντήσεις. με συγχωρείτε για την παράληψη.. σε SQL Server θέλω να το κάνω και από ότι βλέπω το GROUP_CONCAT δεν υποστηρίζεται..
Bspus Δημοσ. 5 Δεκεμβρίου 2007 Δημοσ. 5 Δεκεμβρίου 2007 Bspus, με μπέρδεψες. Με το query που πρότεινα, περιορίζεις τον αριθμό των ονομάτων στο "names" σε όσα θέλεις, ανάλογα τι θα δώσεις στο WHERE (και/ή LIMIT)... Άλλο κατάλαβα... ; Λες SELECT GROUP_CONCAT(CNAME) AS names Δεν ξερω το group concat αλλα το concat γενικως χρησιμοποιειται για να φτιαχνει 1 στρινγκ απο 2 η περισσοτερα μικροτερα στρινγκς Εκτος αν εχω πεσει τελειως εξω στο πως θεωρησα οτι δουλευει, το query θα επιστρεψει μια στηλη, που ονομαζεται names και μια γραμμη στην οποια θα υπαρχουν ολα τα ονοματα ως ενα μεγαλο στρινγκ. Αν αυτο εννουσε ο Harkon οκ. Εγω νομιζα οτι ηθελε το καθε ονομα σε διαφορετικη στηλη.
alexandr0s Δημοσ. 6 Δεκεμβρίου 2007 Δημοσ. 6 Δεκεμβρίου 2007 Bspus, με μπέρδεψες. Με το query που πρότεινα, περιορίζεις τον αριθμό των ονομάτων στο "names" σε όσα θέλεις, ανάλογα τι θα δώσεις στο WHERE (και/ή LIMIT)... Άλλο κατάλαβα... ; Stored Procedure/Cursors είναι σχετικά εύκολο.
Harkon Δημοσ. 6 Δεκεμβρίου 2007 Μέλος Δημοσ. 6 Δεκεμβρίου 2007 το μόνο που βρήκα ως τώρα και όχι με ένα μοναδικό sql είναι : USE Northwind DECLARE @x varchar(8000) SELECT @x = COALESCE(@x+', ','')+ISNULL(ShipName,'') FROM ORders SELECT @x
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.