1

次の SQL Server 2008 テーブルがあります。

ID 目的地 最終結果
01 (555) 319-5170 切断
02 (555) 319-5170 重複
03 (555) 319-5170 重複
04 (555) 261-5000 重複
05 (555) 261-5000 重複
06 (555) 261-7325 ビジー
07 (555) 261-7325 重複
08 (555) 261-7345 無回答
09 (555) 261-7345 重複

私の目標は、一致するすべての電話番号の「最終結果」列を動的に設定することです。したがって、上記の宛先 ((555) 319-5170) の表の例では、一致するすべての電話番号 (555) 319-5170) の結果が値「切断」になります。サンプルの更新ステートメントは次のとおりです。

    更新 C
    SET [最後の結果] = (
    目的地を選択
                FROM コール
                WHERE [最後の結果] NOT IN ('Duplicate','No Phone #')
                GROUP BY 宛先
                HAVING COUNT(宛先) > 1)
    FROM コール C
    内部結合
            (
                目的地を選択
                FROM コール
                WHERE [最後の結果] NOT IN ('Duplicate','No Phone #')
                GROUP BY 宛先
                HAVING COUNT(目的地) > 1
            ) Dup ON Dup.Destination = C.Destination
    WHERE C.[最終結果] NOT IN ('Duplicate','No Phone #')

しかし、私はエラーが発生しています:

メッセージ 512、レベル 16、状態 1、行 1
サブクエリが複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後にある場合、またはサブクエリが式として使用されている場合、これは許可されません。

**期待される出力**:

ID 目的地 最終結果
01 (555) 319-5170 切断
02 (555) 319-5170 切断
03 (555) 319-5170 切断
04 (555) 261-5000 重複
05 (555) 261-5000 重複
06 (555) 261-7325 ビジー
07 (555) 261-7325 ビジー
08 (555) 261-7345 無回答
09 (555) 261-7345 無回答

可能な解決策についてご支援いただきありがとうございます。

4

1 に答える 1

1

ウィンドウ関数で最初Last Resultに調べることができます。row_number()ただし、「最初」を定義する方法が必要です。identityこの例では、次の列があると想定しています。

update  t1
set     [Last Result] = t2.[Last Result]
from    Table1 t1
join    (
        select  row_number() over (partition by Destination
                                   order by Id) as rn
        ,        *
        from     Table1
        ) t2
on      t1.Destination = t2.Destination
        and t2.rn = 1;

SQL Fiddle の例。

ID 列がない場合は、「最初」をどのように定義するかで質問を更新してください。CreateDtたとえば、列があるかもしれません。

于 2013-02-12T15:20:12.193 に答える