アプリ版:「スタンプのみでお礼する」機能のリリースについて

少々混乱してるので変なこと書いてるかもしれません

SQLServer2008R2 にて
複数のデータ列があるデータベースが存在しています

データの重複を除いてその件数を取得したいのですが
重複チェックしたいデータ列が1つだけではないため
COUNT(DISTINCT データ列) は使えません

以下の様なグループ化を行う事でデータそのものは取得できているのですが
求めたいのはデータではなくて対象になるデータ件数となります
SELECT
列1、列2、列3
FROM データベース
GROUP BY
列1、列2、列3

上記の結果を COUNT 関数に渡すような形になると思っています
  (これがそもそも方向性が違うのかも)
調べてはいるのですがその書き方がわかりません
どのようにすればいいのでしょうか

A 回答 (4件)

例えば。


重複の無いテーブル (列は 列1、列2、列3 ) で、行数を数えるなら
 SELECT COUNT(*) FROM 重複の無いテーブル
になりますよね?

サブクエリの使い方で、わかりやすいのは、FROM やJOINで「テーブルの代わりに」サブクエリを使うというものではないでしょうか。
 SELECT COUNT(*) FROM サブクエリ as W -- 別名を付ける
サブクエリ自体は、いくつか制限があるものの、基本は「普通のクエリを()で囲ったもの」

となれば、あとはわかるのでは?
    • good
    • 0
この回答へのお礼

回答に従いクエリを作成したところあっさり解決しました
助かりました

お礼日時:2016/02/15 21:58

SELECT


COUNT(CONVERT(Char,列1)+CONVERT(Char,列2)+CONVERT(Char,列3)) AS 件数
,列1,列2,列3
FROM テーブル
GROUP BY 列1,列2,列3

数億年ぶりなSQLの上、手元にSQLServerが無いっていう。要は全部文字列にして連結、それをカウントすればいいんじゃ?という考え方です。COUNTってGROUP BYに入れなくていいんだっけ?

未検証の上、Convert内のデータ型は適当。なんでISNULL含めエラー回避や空白での文字数や桁数調整は自己責任で。
どうでもいいけどFROM句の後に"データベース"とかどうなんだろう?
    • good
    • 0
この回答へのお礼

回答ありがとうございました
No4 さんの方法で解決しましたのでまだ試していませんが
別途試してみたいと思います

>FROM句の後に"データベース"とかどうなんだろう?
テーブル名の間違いでした

お礼日時:2016/02/15 21:58

データ列の作り方がまずいばあい、1つのSQLではうまく処理ができないことが多いです。



通常は、ワークテーブルを作って、重複を取り除いたデータをそちらに流し込む処理などを行い、その後、ワークテーブルに対してSQLで集計したりします。
ワークテーブルを作るのが難しいときは、そのためのプログラムをVBとかC#などで作成して、データ加工してワークテーブルにデータを格納します。

「なんとか、工夫して1つのSQLで答えを得たい!」という気持ちはわかりますし、がんばれば、そういうSQLが組めることもあるとは思いますが、普通の人であるなら、手間がかかっても上記のような方法でやるのがいいと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます

自作でプログラム作ればできるのはわかっているんですが
   (そのデータベースに書き込み処理してるのは自作プログラムです)
今回は複数データベース結合やテスト環境下におけるデータ重複の
確認を目的としているため  そのための自作プログラムを作るのではなく
SSMS から単純なクエリの実行だけで何とかできないものかと思っています
SSMS 使ってるのであれば 結果とメッセージが表示され メッセージの方確認すれば
データ件数がわかることも承知しています

どうしても無理なようでしたら現状のままで我慢しようかと考えています

お礼日時:2016/02/14 23:59

たとえば。


そのSQL をサブSQLにして、COUNTするとか
    • good
    • 0
この回答へのお礼

回答ありがとうございます
サブSQL=サブクエリの認識でいいのでしょうか?
サブクエリの書き方がわかってないのでもう少し調べてみます
   というか現状調べてはいるのですが
まだ書き方がわからないという状況です
   COUNT(サブクエリ)? と思っていろいろやったがことごとくエラー

お礼日時:2016/02/14 23:58

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

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