sql2005 UPDATEの質問なのですが、先日jamshid6さんに
顧客毎の累計金額を顧客マスタへupdateの方法を教えて
もらったのですが、期間の日付がnullの場合が発生すること
があり、nullの場合は、全データ対象となる書き方を教えて
下さい。
(1)
update 顧客マスタ
set 累計金額=B.累計金額
from 顧客マスタ as A
inner join
(select 顧客コード,sum(売上金額) as 累計金額
from 売上データ
where 売上日付 between '2010/03/01' and '2010/06/30'
group by 顧客コード) as B on A.顧客コード=B.顧客コード
(2)
あと、顧客マスタには、生年月日があり、本日日付より年齢を求めて
顧客マスタの年齢にupdateすることは可能ですか?
これも、生年月日がnullの時もあるので、その場合は、年齢を0にした
いと思います。
顧客マスタ...顧客コード、生年月日(datetime)、年齢(int)
宜しくお願いします。
(1)
期間の日付って「売上日付」ですか?
これがNULLになるのは構造上変じゃないかと思いつつ、「売上日付がNULLなら期間指定が何であれ常に集計対象にしてよい」ということでいいですか?
それでいいなら、
WHERE 売上日付 between '2010/03/01' and '2010/06/30' OR 売上日付 IS NULL
にしてみてください。
(2)
通常生年月日に時刻までは記録されないので、シンプルに以下の通りでいいでしょう。
UPDATE 顧客マスタ
SET 年齢=ISNULL(DATEDIFF(yy,生年月日,GETDATE())+
CASE WHEN DATEADD(yy,DATEDIFF(yy,生年月日,GETDATE()),生年月日)>GETDATE() THEN -1 ELSE 0 END,0)
質問者
補足
sql2005 UPDATE
jamshid6さん
(1)
期間の日付って「売上日付」ですか?
これがNULLになるのは構造上変じゃないかと思いつつ、「売上日付がNULLなら期間指定が何であれ常に集計対象にしてよい」ということでいいですか?
それでいいなら、
WHERE 売上日付 between '2010/03/01' and '2010/06/30' OR 売上日付 IS NULL
にしてみてください。
説明がわるくてすみません。データの売上日付にNULLが入る事はないのですが、
売上日付の抽出範囲を指定する時(3/1~6/30とか)と、範囲を指定せずに売上データ
全件と言う意味です。
売上日付の期間は、@開始日付 datetime,@終了日付 datetimeでストアドへ引数で渡して
いるのでが、UPDATEの前でIFで判断するのか?出来れば、UPDATE分の中に記述出来
ないものかと思います。
宜しくお願いします。
補足
sql2005 UPDATE jamshid6さん (1) 期間の日付って「売上日付」ですか? これがNULLになるのは構造上変じゃないかと思いつつ、「売上日付がNULLなら期間指定が何であれ常に集計対象にしてよい」ということでいいですか? それでいいなら、 WHERE 売上日付 between '2010/03/01' and '2010/06/30' OR 売上日付 IS NULL にしてみてください。 説明がわるくてすみません。データの売上日付にNULLが入る事はないのですが、 売上日付の抽出範囲を指定する時(3/1~6/30とか)と、範囲を指定せずに売上データ 全件と言う意味です。 売上日付の期間は、@開始日付 datetime,@終了日付 datetimeでストアドへ引数で渡して いるのでが、UPDATEの前でIFで判断するのか?出来れば、UPDATE分の中に記述出来 ないものかと思います。 宜しくお願いします。