プロが教える店舗&オフィスのセキュリティ対策術

VB2010にて他のシステムから出力したCSVファイルにアクセスして集計を行おうとしています。
重複を排除したカウントを得たいのですがうまくいきません。

(1) SQL = "SELECT DISTINCT 物品ID FROM …"

だと目的のレコードを抽出できるのですがCOUNTを使って

(2) SQL = "SELECT COUNT(DISTINCT 物品ID) AS 物品数 FROM …"

とする『演算子がありません』とエラーが出て

(3) SQL = "SELECT DISTINCT COUNT(物品ID) AS 物品数 FROM …"

とすると値はですのですが(1)のレコード数と違う数が出てきます???

素人の手探りでプログラミングをしているので動きの違いが分かりません
ご教授お願いします。

A 回答 (4件)

物品ID単位の件数と言う事であれば、こうなると思います。



SQL = "SELECT 物品ID, COUNT(物品ID) AS 物品数 FROM CSV名 GROUP BY 物品ID"
    • good
    • 0
この回答へのお礼

ありがとうございます。
参考になりました。

お礼日時:2012/10/22 10:04

物品IDが重複しているということなら



まず重複をなくしてから集約すればOK


SELECT DISTINCT 物品ID AS 物品数 FROM テーブル名

これをテーブルとして

SELECT
COUNT(物品ID) as 件数
FROM
(SELECT DISTINCT 物品ID AS 物品数 FROM テーブル名)
GROUP BY
物品ID
    • good
    • 0
この回答へのお礼

なるほど!!
サブクエリを使ったらいいんですね。
参考になりました。

お礼日時:2012/10/22 10:05

物品IDの種類の数ということですよね。



DBMSによっては(2)の書き方でも大丈夫なのですが、
ダメなのであれば(1)の結果をカウントすればいいと思います。

SELECT COUNT(*) AS 物品数 FROM (SELECT DISTINCT 物品ID FROM ・・・)

としたらどうでしょうか。
    • good
    • 0
この回答へのお礼

>>DBMSによっては(2)の書き方でも大丈夫なのですが、
ネット・書籍を調べるとそうみたいですが、今回はダメなようです。

最近サブクエリを覚えたばかりなので中々難しいですね。
その分面白くもあるんですけどね(笑)

ありがとうございます。

お礼日時:2012/10/22 10:09

NO2です



間違いがありました。
---
SELECT
COUNT(物品ID) as 物品数
FROM
(SELECT DISTINCT 物品ID FROM テーブル名)
GROUP BY
物品ID
    • good
    • 0
この回答へのお礼

細かな回答ありがとうございます。

大変分かりやすかったです。

お礼日時:2012/10/22 10:10

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