14

このクエリ

SELECT
FirstName, LastName, NCAAStats.AccountId, College_Translator.school_name, StatTypeId, COUNT(*) AS 'Count'
FROM NCAAstats
INNER JOIN College_Translator
ON College_Translator.AccountID = NCAAstats.AccountId
GROUP BY FirstName, LastName, NCAAStats.AccountId, College_Translator.school_name, CalendarYear, StatTypeId
HAVING COUNT(*) >1
ORDER BY 'Count' DESC

ISValidビットを設定したいレコードを選択し0ます。

これらのレコードは、入力エラーによりデータベースに 2 回表示されるレコードです。

私は次のようなものを探しています:

UPDATE NCAAstats
SET IsValid = 0
WHERE (my select statement)

これはMS SQL SERVER 2008上にあります

ありがとう!

4

5 に答える 5

25

次のようにそのサブクエリに参加できます。

update n1 set
    isvalid = 0
from
    ncaastats n1
    inner join (
        SELECT
        FirstName, LastName, NCAAStats.AccountId, College_Translator.school_name, StatTypeId, COUNT(*) AS 'Count'
        FROM NCAAstats
        INNER JOIN College_Translator
        ON College_Translator.AccountID = NCAAstats.AccountId
        GROUP BY FirstName, LastName, NCAAStats.AccountId, College_Translator.school_name, CalendarYear, StatTypeId
        HAVING COUNT(*) >1
    ) n2 on
        n1.accountid = n2.accountid
于 2012-01-09T19:25:45.847 に答える
4

SQL Server は次のような更新を行うことができます。

UPDATE table SET col=vaue
FROM (
  SELECT ......
)

最初にここを見る必要があります:

http://msdn.microsoft.com/en-us/library/aa260662(v=sql.80).aspx

于 2012-01-09T19:26:27.297 に答える
1

CTE を使用し、基本的に自己結合を行います

;with NCAAstatsToUpdate(
    SELECT AccountId 
    FROM NCAAstats n
        INNER JOIN College_Translator ct
      ON ct.AccountID = n.AccountId 
    GROUP BY FirstName, LastName, n.AccountId, ct.school_name, 
         CalendarYear, StatTypeId 
    HAVING COUNT(*) >1 )
UPDATE NCAAstats 
SET IsValid=0
FROM NCAAstats n
inner join NCAAstatsToUpdate u
    on n.AccountId = u.AccountId

または、さらに良いことに、ウィンドウ関数を使用します。

;with NCStats as(
 Select distinct row_number() over (partition by FirstName, LastName, n.AccountId, ct.school_name, 
         CalendarYear, StatTypeId order by n.accountId) rw, n.*
 FROM NCAAstats n
        INNER JOIN College_Translator ct
      ON ct.AccountID = n.AccountId 
)
Update NCStats
Set IsValid=0
Where rw>1

second は「first」レコードを無効に更新しないことに注意してください。また、NCAAstats と College_Translator の間に 1 対 1 の関係があると想定していることに注意してください。

于 2012-01-09T20:23:31.053 に答える