문제

다음과 같은 레코드 세트를 받으십시오.

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

그리고 당신은 원합니다 :

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

다음과 같은 것을 사용할 수 있습니다.

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

이제 Foo, Bar 및 Red가 Varchar 일 때 어떻게 비슷한 성과를 달성 할 수 있습니까?

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

에게:

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

현재 주로 SQL Server 2000에서 작동합니다. 그러나 2005 년 서버에 액세스 할 수 있습니다.

도움이 되었습니까?

해결책

1 분에는 SQL2K 상자에 액세스 할 수 없지만 2005 년 NVarchars에서 MAX (열)가 작동합니다. 원래 테이블의 각 ID에 대해 각 열에 여러 텍스트 값이있는 경우 유일한 문제는 ...

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

보고

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

다른 팁

위의 쿼리는 INT 필드와 마찬가지로 Varchar 필드에 적합합니다. 쿼리의 문제점은 동일한 ID가있는 두 개의 행이 있고 두 행 모두 "FOO"열에 무언가가 있으면 가장 높은 값 (int 및 varchar 모두) 만 표시된다는 것입니다. .

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top