2012-05-07 9 views
1

私はcustid、lastname、firstname、およびDOBがあるテーブルを持っています。グループ化/ SQL SERVERの関連クエリの印刷

私のタスクは、フィフティーズ、カストは、1950年に誕生した場合、そのレコードのための新たなcolumは言うべきつまり...顧客が生まれた十年を与える文字列で

の1つの以上の列を作成することです Custが1974年に生まれた場合、そのレコードの新しい欄には、70年代が記されています。等々。

私は10年ごとにグループ化して、10年の "ストリング"表現が生まれた新しい列を作っていかなければならないと思います。

これは、私は新しい列としてDOBYEARを作成年代、80年代、年代、そして20世紀70年代と前に」、などの入力文字列にしようとしています...

Select DateOfBirth, COUNT(DateOfBirth) as 'DOBYEAR' From Customers Group by DateOfBirth Order By DateOfBirth asc If (Customers.DateOfBirth <= '1979') begin set DOBYEAR = 'Seventies and Before' end If (Customers.DateOfBirth between '1980' and '1989)' begin set DOBYEAR = 'Eighties' end If (Customers.DateOfBirth between '1990' and '1999') begin set DOBYEAR = 'Nineties' end If Customers.DateOfBirth >= '2000' Begin set DOBYEAR = '20th century' end Go

私の試みであります... 。

私に、次のエラーが発生します。

Msg 102, Level 15, State 1, Line 6 
Incorrect syntax near '='. 
Msg 102, Level 15, State 1, Line 10 
Incorrect syntax near '='. 
Msg 102, Level 15, State 1, Line 14 
Incorrect syntax near '='. 
Msg 102, Level 15, State 1, Line 18 
Incorrect syntax near '='. 

正しい方向に私を導いてください。

「DOBYEAR = '70年代とそれ以前」の代わりに「70年代以前の印刷」を使用できますか?

多分、私はIF文を使わずにこれを行うことができますが、方法はわかりません。

あなたがこれを行うには、グループを必要としないThankX

+0

はこの宿題はありますか? –

+0

私たちはこれを学んだことはありませんが、これは家に帰るようなものです...あなたの自己...割り当てのタイプを助けるためにそれに取り組んでください。 –

答えて

4

DateOfBirth列がdatetimeタイプであると仮定すると、(ヒント:それは必要があります):

Select 
    DateOfBirth, 
    Case 
     when datepart(year, DateOfBirth) between 1970 and 1979 then 'Seventies' 
     when datepart(year, DateOfBirth) between 1980 and 1989 then 'Eighties' 
     when datepart(year, DateOfBirth) between 1990 and 1999 then 'Nineties' 
     when datepart(year, DateOfBirth) >= 2000 then '21st century' 
     else 'Before 1970' 
    end as DOBDecadeString 
From 
    Customers 
Order By DateOfBirth asc 
+0

ありがとう...とても簡単でした。私は前に事例を使っていませんでしたが、それについては知っていましたが、忘れました... hehe ..... btw、DateOfBirthはDateTime2に設定されています –

関連する問題