IDNumber、Birthdate、OptionおよびID列を持つメンバーテーブルがあります。 IDはGUIDであり、PKです。異なるID値を持つ同じテーブルのレコードでSQL Server 2008テーブルを更新する方法
今や、一部のメンバーはオプション1にあり、すべての列にデータ(IDNumber、Birthdate)が入っています。 一部のメンバーは他のオプションにあります。 この例では、オプション3のメンバーが、オプション1のメンバーと同じIDNumberを持っています(実際には同じメンバーで、複数のオプションがあります)。 ただし、これらのメンバーのBirthdate列は空です。 私は
Option |IDNumber |Birthdate
-----------------------------------
1 |123 |19900101
1 |234 |19800101
3 |123 |
3 |234 |
は、どのように私はのために不足している生年月日を反映するために更新に行くか、本質的には3
オプションに反映するために、オプション1にメンバーから生年月日値に一致するように、私のテーブルを更新しようとしていますオプション3? 私がこれまで試みられてきた:返し
update member set BirthDate = (select BirthDate from Member where
Option=1 and IDNumber in(select IDNumber from Member
where Option=3))
where Option=3
とエラー:3.
オプションの下
それは、レコードに影響を与えたと言うDECLARE @temp TABLE (
--birthdate int,
idnumber VARCHAR(13)
)
INSERT INTO @temp (idnumber)
SELECT IDNumber
FROM Member
WHERE
OPTION = 1
AND IDNumber IN (SELECT IDNumber FROM Member WHERE OPTION = 3)
UPDATE Member
SET BirthDate = m2.BirthDate
FROM Member m2
INNER JOIN @temp m ON m.idnumber = m2.IDNumber
WHERE
OPTION = 3
ではなく、メンバーは私もやってみました
サブクエリが1より大きい値を返しました。 =、!=、<、< =、>、> =、またはサブクエリが式として使用されている場合は、これは許可されません。
私が間違っている箇所を指摘するのに役立つことができますか?
間違ったアプローチのようです。誕生日を何度も保管しないでください。あなたは別のテーブルが必要です! – jarlh
@Nicholasだから 'Option3'のId '123'にBirthdateを' 19900101'にする必要があります。同様に、Id '234 'と' Option3'の生年月日は '19800101'に設定する必要がありますか? – Kane
メンバーはメンバーテーブルに1回だけ表示され、メンバーIDにリンクする関連するオプションテーブルが必要です。あなたのデザインが間違っていて、あなたがこの問題を抱えている理由です。 – Tanner