dポイントプレゼントキャンペーン実施中!

例えば、下記のようなデータがあったとします。

名前   出勤日  労働時間
Aさん  11月29日  8時間
Bさん  11月29日  7時間
Cさん  11月30日  9時間
Dさん  11月28日  6時間
Eさん  11月27日  3時間

これをSELECT ~ FROM テーブル名 WHERE 出勤日 = "11月29日"~とという感じで抽出した時に、
普通ならAさんとBさんのレコードのみ抽出されますよね?
それを、

名前   労働時間
Aさん   8時間
Bさん   7時間
Cさん   0時間
Dさん   0時間
Eさん   0時間

という感じで抽出するにはどのようなSQL文を書けばいいのでしょうか?
ご存知の方いらっしゃいましたら、ご教授お願いします。

A 回答 (7件)

下記のように行えばOKだと思います。

確認していないので間違っていたらごめんなさい。
ON以下の名前でリンクしている部分はできればそのデータ固有のIDがあれば確実です。

Select A.名前,ISNULL(B.労働時間,0) as 労働時間 From テーブル名 as A
Left Join (Select * From テーブル名 Where 出勤日 >= '2004/11/29') as B ON A.名前 = B.名前

この回答への補足

早速の回答ありがとうございます。

先ほど試してみたところ、
「クエリ式,'ISNULL(B.労働時間,0)'の関数で使用されている引数の数が正しくありません。」

というエラーがでてしまいました(--;)
一体どういうことなんでしょうか?
色々ためしてみましたが、ダメでした…。

補足日時:2004/12/01 15:35
    • good
    • 0

つまらない事を確認して申し訳ありませんが、#1のステートメントと全く同じ書き方ですか?Left JoinがただのJoinになっていませんか?



.NETのことは良く分かりません。もしだめであるならば、#3の回答でも解決できると思います。

select 名前,
case when 出勤日 => '2004/11/29' then 労働時間 else 0 end as 労働時間
from テーブル名
    • good
    • 0
この回答へのお礼

がんばってみましたが、どうしてもできないので、
あきらめました(^^;)
これをひきずって仕事するわけにも行かないので…。
ほんとうに、色々とありがとうございました!

お礼日時:2004/12/07 09:40

#5の補足です。


もしOracleでしたら、#1のSQL文のISNULLをnvlに変えて実行してみてください。

ちなみにSQLのCase-Whenに相当するOracleの命令はDecodeです。
DECODE( <式1> , <判定値1> , <結果値1> [ , <判定値2> , <結果値2> , ... ] [ , <デフォルト値> ] )

この回答への補足

ご丁寧な回答本当にありがとうございます。
しかし、サーバはSQLに間違いないです。と思います。
うちにはSQLサーバしかないので。
それで先ほど、やっとエラーせずにできたんですが、
結果が、
名前   労働時間
Aさん   8時間
Bさん   7時間

でした。。。
やはりASP.NETと何か関係があるんでしょうか?

補足日時:2004/12/03 14:32
    • good
    • 0

もしかしたら、使用しているデータベースがMicrosoftのSQL Serverではなくて、Oracleとか他のデータベースを使用している可能性がありますね。

その場合、ISNULLやCASE-WHENといったステートメントが使用できません。
実際に使用しているデータベースは何でしょうか。
    • good
    • 0

そのエラーの出るSQL文を載せてください。



CREATE TABLE文から載せてもらった方がよい気がします。
    • good
    • 0

全て抽出するわけだから、Where句に条件として書かかなければ良いだけです。


その上で、表示を小細工したいということなので、加工式を書く。

select
名前,
case
when 出勤日 = '2004/11/29' then 労働時間 else 0 end as 労働時間
from テーブル名
    • good
    • 0

nandarou-1011さんの回答通りで可能だと思います。


試しましたが、正常に取得できました。

この回答への補足

ご回答ありがとうございます。
nandarou-1011さんの通りで、やっとエラーなく動きました。
しかし、結果が
名前   労働時間
Aさん   8時間
Bさん   7時間
になってしまいます。いったいなぜ?
ISNULLもちゃんと使っているのに…。

本当に補足なのですが、ASP.NETで使っています。
それに何か関係があるのでしょうか?

補足日時:2004/12/03 14:28
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す