Pregunta

Supongamos que obtienes un juego de registros como el siguiente:

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

Y tú quieres:

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

Podrías usar algo como:

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

Ahora, ¿cómo podrías lograr algo similar cuando Foo, Bar y Red son VARCHAR?

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

Para:

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

Actualmente trabaja principalmente con SQL Server 2000; pero tiene acceso a los servidores de 2005.

¿Fue útil?

Solución

No tengo acceso a un cuadro SQL2K en el momento, pero seleccionar max (columna) funcionará en nvarchars en 2005. El único problema será si tiene varios valores de texto debajo de cada columna para cada ID en su tabla original ...

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

devuelve

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

Otros consejos

La consulta que tenía anteriormente funciona bien para los campos VARCHAR como lo hizo para los campos INT. Sin embargo, el problema con su consulta es que si tiene dos filas con el mismo ID, y ambas filas tenían algo en el " Foo " Columna, solo se mostrará la que tenga el valor más alto (tanto para INT como para VARCHAR).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top