すいません。教えてください。
emp表からJobのデータが何種類あるか出力したいとき、

・ select count(distinct job) from emp;

はいいのに、

・ select count(job) from emp group by job;

がエラーになる理由を知っている方、教えてください。

A 回答 (3件)

group by句はグループ化したい列に適用します。


ご質問の内容でSQL文を作成すると
select job,count(*) job_count from emp group by job;
となります。

結果は
job     job_count
PRESIDENT      1
MANAGER       10
CLEAK        20
の様になります(数字は適当です)。
    • good
    • 0
この回答へのお礼

なるほど、group by句で指定した内容と、select句で選択した
内容が同じでないからエラーになるんですね。
よくわかりました。ありがとうございました。

お礼日時:2001/12/27 11:36

No.2のteppyです


すいません間違えました
>select job, count(job) from emp group by job, count(job);

select job, count(job) from emp group by job;

No.1のsghさんのSQL文が正しいです
    • good
    • 0
この回答へのお礼

よくわかりました。
ありがとうございました。

お礼日時:2001/12/27 11:38

group by句は出力したい項目をグループ化するところです


出力されない項目をグループ化することは出来ませんので、エラーがでます

>select count(job) from emp group by job;

select count(job) from emp group by count(job);
とすれば、正常に出力されるでしょう

>emp表からJobのデータが何種類あるか出力したいとき、
だったら、下記のほうが宜しいかと...
select job, count(job) from emp group by job, count(job);
    • good
    • 0

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QEXCEL VBA ワークシートのコピーについて

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピー先BOOKに

         ワークシート名
ワークシート1 処理1ワークシート 
ワークシート2 処理2ワークシート
ワークシート3 処理3コピー元ワークシート3

という具合にワークシートを複数コピーしたいのですが

処理ごとにデータを代入し、コピー処理はできるのですが。

コピー先BOOK

ワークシート3 処理3ワークシート

だけしかコピーされてないBOOKが作成されます。
上書きされているのだと思われます。

対処法が調べましたが見つけられていません。

すいませんが対処法及び参考VBA等ご教授宜しくお願いいたします。

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピ...続きを読む

Aベストアンサー

今どういうコードを書いているのか不明なので、とりあえず
「1つのシートを別のブックに複数回コピーする」ための参考ソースを書きます。
コピー元のブックに下記ソースを貼り付けて実行してもらえば
新規ブックにコピー元のシートが3枚コピーされると思います。
(新規ブックを追加しているのでシート数は3枚より多くなります)

Sub copySheet()
Dim masterWb As Workbook
Dim masterSh As Worksheet
Dim copyWb As Workbook

Set masterWb = ThisWorkbook
Set masterSh = masterWb.Sheets(1)
Set copyWb = Workbooks.Add

'ここからが実際のコピー処理です。
'単純に3回コピーメソッドを呼び出して3回コピーしています。
masterSh.Copy before:=copyWb.Sheets(1)
masterSh.Copy before:=copyWb.Sheets(1)
masterSh.Copy before:=copyWb.Sheets(1)

End Sub

今どういうコードを書いているのか不明なので、とりあえず
「1つのシートを別のブックに複数回コピーする」ための参考ソースを書きます。
コピー元のブックに下記ソースを貼り付けて実行してもらえば
新規ブックにコピー元のシートが3枚コピーされると思います。
(新規ブックを追加しているのでシート数は3枚より多くなります)

Sub copySheet()
Dim masterWb As Workbook
Dim masterSh As Worksheet
Dim copyWb As Workbook

Set masterWb = ThisWorkbook
Set masterSh = masterWb.Sheets(1)
Set copyWb = W...続きを読む

QGROUP BYを使用したCOUNT

いつもお世話になっております。

現在下記のようなSQLを発行していまして、
件数を取得したいのですが、取得データの結果が
0件以外の時は良いのですが、0件の時は
「レコードが選択されませんでした」と表示されてしまいます。
何とか0件で表示できないでしょうか?

SELECT COUNT(*) FROM T_M_MAKER
HAVING MAKER_CD = '010'
GROUP BY MAKER_CD

苦し紛れに
SELECT DECODE(COUNT(*),'',0,COUNT(*)) FROM T_M_MAKER
HAVING MAKER_CD = '010'
GROUP BY MAKER_CD

というのもやってみましたが、結果は一緒でした。
どなたかお分かりになる方、回答をお願いします。

Aベストアンサー

こんにちわ。

RDBMS の種類が不明ですが、Oracle であれば
インライン・ビューで解決できます。
Select count(*) from (select ~ from T_M_MAKER
 group by ~ having ~);

QEXCEL VBA ワークシートのコピーについて

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピー先BOOKに

         ワークシート名
ワークシート1 処理1ワークシート 
ワークシート2 処理2ワークシート
ワークシート3 処理3ワークシート

という具合にワークシートを複数コピーしたいのですが

処理ごとにデータを代入し、コピー処理はできるのですが。

コピー先BOOK

ワークシート3 処理3ワークシート

だけしかコピーされてないBOOKが作成されます。
上書きされているのだと思われます。

対処法が調べましたが見つけられていません。

すいませんが対処法及び参考VBA等ご教授宜しくお願いいたします。

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピ...続きを読む

Aベストアンサー

> 配列にワークシートのオブジェクトを入れることとか可能なのでしょうか?

それは多分できないと思います。


> 複数のセル・シートを何回もコピーする場合にでるらしいです。

多分、メモリをたくさん使っちゃってるせいでしょうね。
まず、メモリ使用を減らすようにしましょうか。

・testwriteの最後にオブジェクト変数のメモリ解放を行う。
 具体的には以下のように書く。もうやってたらすみません。
Set cbook = Nothing
Set mastersheet = Nothing
・testwriteの中でのブックオープンおよび保存をやめる。
 新規ブックのオープンをtestwriteを呼ぶ前に1度だけ行い、
 testwriteの中ではその新規ブックに対してシートを追加していく。
 そしてtestwriteの処理が全部終わったら、
 新規ブックの全シートを1度に「記録シートYYYY/MM/DD.xls」にコピーする。

それでも駄目でしたら、以下の回答No.1を試してみてください。
http://oshiete.goo.ne.jp/qa/1822561.html

> 配列にワークシートのオブジェクトを入れることとか可能なのでしょうか?

それは多分できないと思います。


> 複数のセル・シートを何回もコピーする場合にでるらしいです。

多分、メモリをたくさん使っちゃってるせいでしょうね。
まず、メモリ使用を減らすようにしましょうか。

・testwriteの最後にオブジェクト変数のメモリ解放を行う。
 具体的には以下のように書く。もうやってたらすみません。
Set cbook = Nothing
Set mastersheet = Nothing
・testwriteの中でのブックオープンおよび保存をやめ...続きを読む

Qgroup by でselect

社員テーブルがありまして、同じ苗字の人がどれぐらいいるのかを取得しようとしています。

select mi,na,count(mi) from shain group by mi

これで下のような結果を得るつもりが

青木 章太 2 ←青木が2人いたということ
青木 健吾 2 ←青木が2人いたということ
石田 雄人 5 ←石田が5人いたということ
・・・

下のようなエラーになりました。どうしたらよいでしょうか?
mi,na,count(mi) の3項目を得るのは必須です。

Microsoft OLE DB Provider for ODBC Drivers エラー '80040e14'
[Microsoft][ODBC Microsoft Access Driver] 集計関数の一部として指定された式 'na' を含んでいないクエリを実行しようとしました。

Aベストアンサー

Selectで記述した項目はGroup byでも必要。

select mi,na,count(mi) from shain group by mi,na

select mi&na,count(mi) from shain group by mi&na
の方が「わかりやすい」という意味で適切かも。

QEXCELのVBAでシートコピーをしたとき元のマクロを削除するには?

VBAのマクロでシートのコピーをしたいのですが、元のシートにはVBAのコードが含まれています。コピーするのはデータだけのコピーが必要で、マクロ自体は必要ないのですが、それを削除するコードはどのように書いたらいいのでしょうか?
どうしてもコピーしたファイルを開くと「マクロが含まれています」という確認メッセージが出てしまうのですが、それもなくしたいのです。
シートにフォームのボタンが配置されている場合も同様に、そのボタン自体をなくした状態でコピーを行いたいのですが・・・。プログラムで行うのは不可能なのでしょうか?

Aベストアンサー

No2です。
サンプルコードを書いてみました。
「オリジナル」という名前のシートを別ブックとしてコピペ保存します。

Sub サンプル()
Dim sc As Integer
sc = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー
Workbooks.Add 'ブック追加
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlValues '値貼り付け
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け
Sheets("Sheet1").Name = "コピー"
Application.CutCopyMode = False
Application.SheetsInNewWorkbook = sc
ActiveWorkbook.Close
ThisWorkbook.Activate
End Sub

No2です。
サンプルコードを書いてみました。
「オリジナル」という名前のシートを別ブックとしてコピペ保存します。

Sub サンプル()
Dim sc As Integer
sc = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー
Workbooks.Add 'ブック追加
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlValues '値貼り付け
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け...続きを読む

QDISTINCT + COUNT

みなさんこんにちは。

以下のようなSQL文のCOUNT関数を作りたいのですが、
うまい手法がわからず困っています。

SELECT DISTINCT Ta.会員ID, Tb.品番
FROM TABLE_A AS Ta LEFT JOIN
TABLE_B AS Tb ON Ta.ID = Tb.ID

↑こいつのCOUNTですが、単純に
SELECT COUNT(DISTINCT Ta.会員ID, Tb.品番) ~
とやるとエラーになってしまいます。

どうやってやればカウントできるのでしょうか?
すごく初歩的なことだと思いますが、
ご助言お願いいたします。

Aベストアンサー

DBの種類は?

SELECT COUNT(*) FROM
(
SELECT DISTINCT Ta.会員ID, Tb.品番
FROM TABLE_A AS Ta LEFT JOIN
TABLE_B AS Tb ON Ta.ID = Tb.ID
)

これがOKかNGかはDBによります。

QVBAのワークシートの追加とコピーなんですが。

VBAのワークシートの追加とコピーなんですが。


sheet1の原紙をすべてコピーして、

新しくワークシートを追加してそのシートに貼り付けるプログラムを

教えてください。

Aベストアンサー

With ActiveWorkbook
  aaa = .Sheets("Sheet1").Cells(9, 4).Value 'aaaは社員
  bbb = .Sheets("Sheet1").Cells(9, 5).Value 'bbbは4月
  .Sheets("Sheet1").Copy After:=.Sheets(.Sheets.Count)
End With
ActiveSheet.Name = aaa & bbb

QSELECT DISTINCT の使いかた

テーブル名にA1,A2,A3と言う列がありA1内の列の重複を省き
結果をA1,A2,A3全て表示したいのですが方法がわかりません。
どなたかHELP お願いします。

SELECT DISTINCT A1 FROM テーブル

Aベストアンサー

もうひとつはっきりやりたいことが分からないのですが、DISTINCTは、組み合わせで重複しているものを取り除くのですが、いったいどうゆうことをするのでしょうか?

A1 A2 A3
1 A α
1 A β
2 A α
1 A α

SELECT DISTINCT A1,A2,A3 FROM テーブル

A1 A2 A3
1 A α
1 A β
2 A α
(4行目が1行目と重複しているので、表示されない)

補足お願いします。

QEXCEL2002で、ブック内のワークシートを他のブックに(VBA含む丸ごと)コピーして移す方法

 EXCEL2002で、ブック内のワークシートを他のブックに(VBA含む丸ごと)コピーして移す方法
 普通のやり方では、セルの数字、値だけで、通常は、中身の重要な"関数式"であったり、VBA等のプログラムまで、コピーされることは、ありませんので、そこまで、出来る方法を教えて下さい。

Aベストアンサー

コピー元のBookとコピー先Bookをどちらも開いて
Excel画面上に並べます(左右に並べる方が作業しやすいと思います)

Ctrlキーを押しながら、コピーしたいシートのタブ部分を
クリック長押しすると、+マークと▲マークが出てきます。
マークが出てきたら、新しいBookにドラッグ&ドロップ で
シートコピーが出来ます。

全く同じシートがコピーされ、マクロもコピーされます。

QSelect Distinct の使い方

【Access 2013 VBA / SQL】

[親Table]
*ID1
*日付
*受注元会社名

{子Table ]
*ID2(主キー)
*ID1(親テーブルのID)
*ID3(外部キー)

[Table B]
*ID3
*会社名

------------------------------
ID2  ID1    会社ID
------------------------------
1    1     A
2    1     B
3    1     B
4    1     C
5    2     B
6    2     A
7    2     A
------------------------------

ID1=1のもので、会社IDを一意にして選択した会社名を表示したい
この時、SQLでどのように書けばよいでしょうか

Aベストアンサー

会社名だけならもっとシンプルに出せるかと思います。

SELECT [Table B].会社名
FROM [Table B]
WHERE EXISTS (
SELECT 0
FROM [子Table]
WHERE [子Table].ID3 = [Table B].ID3
AND [子Table].ID1 = 1
);


人気Q&Aランキング