1

次のようなレコードセットを取得するとします。

| 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 サーバーにアクセスできます。

4

2 に答える 2

1

上記のクエリは、INT フィールドの場合と同様に、VARCHAR フィールドでも問題なく機能します。ただし、クエリの問題は、同じ ID を持つ 2 つの行があり、両方の行の "Foo" 列に何かが含まれている場合、最も高い値 (INT と VARCHAR の両方) を持つ行のみが表示されることです。 .

于 2008-10-30T09:59:44.467 に答える
0

現時点では SQL2K ボックスにアクセスできませんが、select max(column) は 2005 年に nvarchars で機能します。唯一の問題は、元のテーブルの各 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
于 2008-10-30T10:00:27.380 に答える