1

私は非常に奇妙な問題を抱えています。次の 2 つの行を検討してください。

val   | text     | akr       | usr_bk      
-----------------------------------------------
001   | hello    | 1024      | admin
001   | hello    | 1024      | admin

ご覧のとおり、一意の列やその他の識別子はありません。

しかし; たとえば、他の行を変更せずに、 1行だけを更新することは可能ですか(そしてどのように) ?val = 002

SQL Server 2008 で実行しています。

4

1 に答える 1

4

どれが必要かを知る必要がありますが、指定したサンプルデータを使用して次のようにすることができます。

;WITH NumberedTbl AS (
  SELECT ROW_NUMBER() OVER (
    PARTITION BY val, text, akr, admin
    ORDER BY val, text, akr, admin
  ) AS RowNumber,
  val, text, akr, admin
  FROM tbl
)

UPDATE t
SET val = '002'
FROM NumberedTbl t
WHERE t.RowNumber = 1

SELECT * FROM tbl

実際の例については、このSqlFiddle を参照してください。おそらくあなたがやりたいことは、これを構築し、次のWITHようにテーブルをフィルタリングするように設定することです:

;WITH NumberedTbl AS (
  SELECT ROW_NUMBER() OVER (
    PARTITION BY val, text, akr, admin
    ORDER BY val, text, akr, admin
  ) AS RowNumber,
  val, text, akr, admin
  FROM tbl
  WHERE ... -- ADD SOME WHERE CLAUSE HERE
)
于 2013-03-20T15:33:28.437 に答える