5

一部の顧客が複数回リストされているデータベースから、一意の顧客のリストを抽出しようとしています。顧客がある部門から別の部門に移動したため、または顧客が別の住所に登録されたために (またはその両方)、(ほとんど) 重複する行が存在します。

したがって、私の課題は次のようなデータにあります。

ID   Customer   Division   Address
-----------------------------------
1    A          M          X
1    A          L          X
2    B          N          Y
2    B          N          Z
3    C          P          W
3    C          T          S

select ステートメントで顧客ごとに 1 行を返すようにしたい (どの行かは気にしない)。

ID   Customer   Division   Address
-----------------------------------
1    A          M          X
2    B          N          Y
3    C          P          W

SQL Server 2008 を使用しています。最後の 2 列で「GROUP BY」を実行する必要があると思いますが、そこから 1 行だけを取得する方法がわかりません。

誰かが私を助けてくれることを願っています!

(はい、問題をソースで解決する必要があることはわかっていますが、残念ながら、合理的な時間枠内では不可能です...)。

4

2 に答える 2

3
select ID, Customer,Division, Address from 
(
SELECT 
ID, Customer,Division, Address,
ROW_NUMBER() OVER (PARTITON BY Customer Order by Id) as RN
FROM T
) t1
WHERE RN=1
于 2013-08-13T12:05:36.393 に答える
1

これを試してみてください -

DECLARE @temp TABLE
(
      ID INT
    , Customer CHAR(1)
    , Division CHAR(1)
    , [Address] CHAR(1)
)

INSERT INTO @temp (ID, Customer, Division, [Address])
VALUES 
    (1, 'A', 'M', 'X'),
    (1, 'A', 'L', 'X'),
    (2, 'B', 'N', 'Y'),
    (2, 'B', 'N', 'Z'),
    (3, 'C', 'P', 'W'),
    (3, 'C', 'T', 'S')

SELECT t.id
     , t.Customer
     , t.Division
     , t.[Address]
FROM
(
    SELECT *
         , rn = ROW_NUMBER() OVER (PARTITION BY Customer ORDER BY 1/0)
    FROM @temp
) t
WHERE T.rn = 1

SELECT ID, Customer, Division = MAX(Division), [Address] = MAX([Address])
FROM @temp
GROUP BY ID, Customer

出力 -

id          Customer Division Address
----------- -------- -------- -------
1           A        M        X
2           B        N        Y
3           C        P        W

ID          Customer Division Address
----------- -------- -------- -------
1           A        M        X
2           B        N        Z
3           C        T        W
于 2013-08-13T12:05:31.583 に答える