2009-07-13 2 views
0

Ich habe eine Abfrage, die Daten in der folgenden Form zurückverketten Spalten aus einer Ergebnismenge in SQL Server 2000

attribute  value 
---------  ---------- 
petid   1000 
name   buttercup 
species   cat 
age    10 
owner   Bob Dole 

Grundsätzlich ich durch jede Zeile gehen will und gibt die Felder Namen und Art in einem einzigen String , also hier wäre das Ergebnis

buttercup cat 

Irgendwelche Ideen, wie ich das tun könnte?

+0

Sie können tue dies nicht in normalem Standard-SQL. In der Regel müssen Sie einen Cursor verwenden, der spezifisch für die Plattform ist, auf der Sie sich befinden. SQL Server? Orakel? Zugriff? –

+0

Ich bin auf MSSQL 2000 – Matt

+0

Eigentlich müssen Sie keinen Cursor verwenden, wie von meiner Antwort unten gezeigt ... http://stackoverflow.com/questions/1122596/iterating-through-a-result-set- in-sql/1122621 # 1122621 –

Antwort

2

Versuchen Sie es. Ich habe nur versucht, es mit SQL Serer 2008, aber vielleicht wird es funktionieren:

DECLARE @Concat nvarchar(50) 
SET @Concat=N'' 

SELECT @Concat = @Concat + Value + N' ' 
FROM dbo.AttributeValue 
WHERE Attribute IN (N'name', N'species') 

SELECT @Concat 
1

Ok - Nun denke ich, dass ich das Datenformat verstehen ...

Hier ist der Code, den Probensatz (nur sicherstellen, dass ich habe es richtig verstanden habe) zu erstellen

CREATE TABLE MyTable 
(
attribute varchar(20), 
value varchar(20) 
) 

INSERT INTO MyTable VALUES('petid','1000') 
INSERT INTO MyTable VALUES('name','buttercup') 
INSERT INTO MyTable VALUES('species','cat') 
INSERT INTO MyTable VALUES('age','10') 
INSERT INTO MyTable VALUES('owner','Bob Dole') 

Hier ist meine Antwort:

SELECT a.value + ' ' +b.value 
FROM MyTable AS a 
INNER JOIN MyTable AS b ON a.attribute='name' AND b.attribute = 'species' 
0

Der Cursor Weg, dies zu tun, etwas, was wie this-

DECLARE @name varchar(20) 
DECLARE @species varchar(20)  
DECLARE nameSpeciesCursor CURSOR FOR 
SELECT name, species FROM tableName 

OPEN nameSpeciesCursor 
FETCH NEXT FROM nameSpeciesCursor INTO @name, @species 

WHILE @@FETCH_STATUS = 0 
BEGIN 
     PRINT @name + ' ' + @species  
     FETCH NEXT FROM nameSpeciesCursor INTO @name, @species 
END 

CLOSE nameSpeciesCursor 
DEALLOCATE nameSpeciesCursor 

Jubel wäre