Frage

Angenommen, Sie ein Re-Cord erhalten wie folgt aus:

| ID  | Foo  | Bar  | Red  |
|-----|------|------|------|
| 1   | 100  | NULL | NULL |
| 1   | NULL | 200  | NULL |
| 1   | NULL | NULL | 300  |
| 2   | 400  | NULL | NULL |
| ... | ...  | ...  | ...  | -- etc.

Und Sie wollen:

| ID  | Foo | Bar | Red |
|-----|-----|-----|-----|
| 1   | 100 | 200 | 300 |
| 2   | 400 | ... | ... |
| ... | ... | ... | ... | -- etc.

könnten Sie so etwas wie:

SELECT
  ID,
  MAX(Foo) AS Foo,
  MAX(Bar) AS Bar,
  MAX(Red) AS Red
FROM foobarred
GROUP BY ID

Nun, wie können Sie erreichen ähnlich, wenn Foo, Bar, und Red VARCHAR sind?

| ID  | Foo      | Bar     | Red     |
|-----|----------|---------|---------|
| 1   | 'Text1'  | NULL    | NULL    |
| 1   | NULL     | 'Text2' | NULL    |
| 1   | NULL     | NULL    | 'Text3' |
| 2   | 'Test4'  | NULL    | NULL    |
| ... | ...      | ...     | ...     | -- etc.

An:

| ID  | Foo      | Bar     | Red     |
|-----|----------|---------|---------|
| 1   | 'Text1'  | 'Text2' | 'Text3' |
| 2   | 'Text4'  | ...     | ...     |
| ... | ...      | ...     | ...     | -- etc.

Derzeit arbeitet in erster Linie mit SQL Server 2000; sondern haben Zugriff auf 2005-Server.

War es hilfreich?

Lösung

Ich habe keinen Zugriff auf eine SQL2K Box in der Minute aber select max (Spalte) wird Das einzige Problem im Jahr 2005 auf nvarchars funktionieren wird, wenn Sie für jede ID in Ihrer ursprünglichen Tabelle mehrere Textwerte unter jede Spalte ...

CREATE TABLE Flatten (
    id int not null,
    foo Nvarchar(10) null,
    bar Nvarchar(10) null,
    red Nvarchar(10) null)

INSERT INTO Flatten (ID, foo, bar, red) VALUES (1, 'Text1', null, null)
INSERT INTO Flatten (ID, foo, bar, red) VALUES (1, null, 'Text2', null)
INSERT INTO Flatten (ID, foo, bar, red) VALUES (1, null, null, 'Text3')
INSERT INTO Flatten (ID, foo, bar, red) VALUES (2, 'Text4', null, null)



SELECT 
    ID, 
    max(foo),
    max(bar),
    max(red)
FROM
Flatten
GROUP BY ID

Rückkehr

ID          Foo        Bar        Red
----------- ---------- ---------- ----------
1           Text1      Text2      Text3
2           Text4      NULL       NULL

Andere Tipps

Die Abfrage Sie oben hatte funktioniert gut für VARCHAR Felder, wie es für INT Felder haben. Das Problem mit Ihrer Anfrage ist aber, dass, wenn Sie zwei Reihen mit der gleichen ID haben, und diese beiden Reihen hatte etwas in der „Foo“ -Spalte, dann nur das eine mit dem höchsten Wert (beide für INT und VARCHAR) angezeigt wird .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top