
例えば、下記のようなデータがあったとします。
名前 出勤日 労働時間
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文を書けばいいのでしょうか?
ご存知の方いらっしゃいましたら、ご教授お願いします。
No.1ベストアンサー
- 回答日時:
下記のように行えば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)'の関数で使用されている引数の数が正しくありません。」
というエラーがでてしまいました(--;)
一体どういうことなんでしょうか?
色々ためしてみましたが、ダメでした…。
No.7
- 回答日時:
つまらない事を確認して申し訳ありませんが、#1のステートメントと全く同じ書き方ですか?Left JoinがただのJoinになっていませんか?
.NETのことは良く分かりません。もしだめであるならば、#3の回答でも解決できると思います。
select 名前,
case when 出勤日 => '2004/11/29' then 労働時間 else 0 end as 労働時間
from テーブル名
がんばってみましたが、どうしてもできないので、
あきらめました(^^;)
これをひきずって仕事するわけにも行かないので…。
ほんとうに、色々とありがとうございました!
No.6
- 回答日時:
#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と何か関係があるんでしょうか?
No.5
- 回答日時:
もしかしたら、使用しているデータベースがMicrosoftのSQL Serverではなくて、Oracleとか他のデータベースを使用している可能性がありますね。
その場合、ISNULLやCASE-WHENといったステートメントが使用できません。実際に使用しているデータベースは何でしょうか。
No.3
- 回答日時:
全て抽出するわけだから、Where句に条件として書かかなければ良いだけです。
その上で、表示を小細工したいということなので、加工式を書く。
select
名前,
case
when 出勤日 = '2004/11/29' then 労働時間 else 0 end as 労働時間
from テーブル名
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
SQLでSUMなどの関数でデータが無い時に0を返したい。
Oracle
-
テーブルからのselectにおいてデータの有無により結果をわけたい
PostgreSQL
-
count集計の結果が0の場合でも表示したい
SQL Server
-
-
4
SQL文で、合計が0のレコードを表示させないようにしたい。
SQL Server
-
5
データ無し時は空白行にしたい【SQLITE】
その他(データベース)
-
6
SQLで、Join句で結合したテーブルにデータが無い場合について
SQL Server
-
7
DBの定義のサイズを大きくし過ぎると問題ある?
その他(データベース)
-
8
GROUP BYを行った後に結合したい。
Oracle
-
9
Statement ignored というエラー
Oracle
-
10
【Transact-sql】 where条件、inのパタメータを変数に持たせる方法
SQL Server
-
11
テーブルに存在しない列をselect文で出力する事はできないでしょうか?
PostgreSQL
-
12
【SQL】他テーブルに含まれる値に合致する行を抽出
その他(データベース)
-
13
SQLのテーブルにないデータの出力
SQL Server
-
14
SQLserver算術オーバーフローエラーについて
SQL Server
-
15
【PHP】SQL文のSUM関数で出力した2つのデータを減算する方法を教えて下さい。
MySQL
-
16
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
17
テーブル名が可変の場合のクエリの書き方
MySQL
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【SQL】他テーブルに含まれる値...
-
Accessの構成をコピーしたい
-
既存データをINSERT文にして出...
-
SQLサーバに対するSQL文で抽出...
-
あってますか?SQL
-
SQLで、Join句で結合したテ...
-
ACCESS クエリーでソートの不具合
-
ACCESSのVBAにてExcelに行...
-
SQLです!!教えてください。あ...
-
DB2のSQLコマンドについて
-
ExcelのVLOOKUP関数の動作をMyS...
-
ADO+ODBCでテーブルに接続する...
-
結合したテーブルをSUMしたい
-
ExcelのMatch関数のようなもの...
-
レリーショナルな設計
-
「総降水量が100mm以上になる...
-
SQLです!!教えてください。あ...
-
H2 DataBaseご存知の方教えて...
-
複数のテーブルからデータを取...
-
重複データの一方を削除するSQL...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【SQL】他テーブルに含まれる値...
-
SQLサーバに対するSQL文で抽出...
-
既存データをINSERT文にして出...
-
SQLで、Join句で結合したテ...
-
Accessの構成をコピーしたい
-
結合したテーブルをSUMしたい
-
副問合せを使わずにUNIONと同様...
-
テーブル名が可変の場合のクエ...
-
2つのテーブルをLIKE演算子のよ...
-
ExcelのMatch関数のようなもの...
-
改行を含んだデータのインポート
-
PRIMARY KEYのコピー
-
ADO+ODBCでテーブルに接続する...
-
ACCESSのVBAにてExcelに行...
-
同一テーブル内での比較(最新...
-
(SQL)日数の計算
-
ExcelのVLOOKUP関数の動作をMyS...
-
データ無し時は空白行にしたい...
-
必要なテーブルの個数について。
-
複数選択か?単数選択か? テ...
おすすめ情報