- ベストアンサー
SQLでの表作成について
使用しているのはSQL Server2000で、 以下のような各PCにインストールされているソフトウェア一覧の テーブルから コンピュータ名 | ソフトウェア名 ---------------------------------- コンピュータ1 | ソフト1 コンピュータ1 | ソフト2 コンピュータ1 | ソフト3 コンピュータ2 | ソフト2 コンピュータ2 | ソフト4 ・ ・ ・ ・ 以下ののようなどのPCにある特定のソフトウェアがインストールされているかを 確認するための表を作成したいのですが、 なにかよい方法はないでしょうか? できればSQLで作成したいとは思っています。 ご教授よろしくお願いいたします。 コンピュータ名 | ソフト1 | ソフト2 | ソフト4 ---------------------------------------------- コンピュータ1 | 1 | 1 | コンピュータ2 | | 1 | 1 ・ ・ ・ ・ ・ ・ ・ ・
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
クロス集計のようなことをやりたいのですよね? select pc_name, sum(case when soft_name='soft1' then 1 else 0 end) as soft1, sum(case when soft_name='soft2' then 1 else 0 end) as soft2, sum(case when soft_name='soft3' then 1 else 0 end) as soft3, sum(case when soft_name='soft4' then 1 else 0 end) as soft4, sum(case when soft_name='soft5' then 1 else 0 end) as soft5, sum(case when soft_name='soft6' then 1 else 0 end) as soft6 from t1 group by pc_name
その他の回答 (2)
- t_ohta
- ベストアンサー率38% (5238/13705)
こういう事ですか? (泥臭いやり方だけど (^^; ) select a.コンピュータ名 as コンピュータ名, b.件数 as ソフト1, c.件数 as ソフト2, d.件数 as ソフト3, e.件数 as ソフト4 from ( select コンピュータ名 from テーブル group by コンピュータ名 ) a ( select コンピュータ名, count(ソフト1) as 件数 from テーブル where ソフトウェア名 = 'ソフト1' group by コンピュータ名 ) b ( select コンピュータ名, count(ソフト2) as 件数 from テーブル where ソフトウェア名 = 'ソフト12' group by コンピュータ名 ) c ( select コンピュータ名, count(ソフト3) as 件数 from テーブル where ソフトウェア名 = 'ソフト3' group by コンピュータ名 ) d ( select コンピュータ名, count(ソフト4) as 件数 from テーブル where ソフトウェア名 = 'ソフト4' group by コンピュータ名 ) e where a.コンピュータ名 = b.コンピュータ名 and a.コンピュータ名 = c.コンピュータ名 and a.コンピュータ名 = d.コンピュータ名 and a.コンピュータ名 = e.コンピュータ名 ;
補足
回答ありがとうございます。 実行してみましたが、 where句で指定したソフト全てがインストールされている コンピュータの結果しか返ってきませんでした。
- shimix
- ベストアンサー率54% (865/1590)
普通に「CREATE TABLE」のSQL文を投げればいいと思いますが、そういうことではないんでしょうか?テーブルの設計の問題なのか、SQL文の文法の問題なのか、SQLServerへ投げる方法の問題なのか、さっぱりわかりません。補足をお願いします。
補足
質問がわかりにくくて申し訳ありません。 質問欄の最初の表のようなテーブルから select文を使用して質問欄の2番目の表のような結果を得たいということです。
お礼
回答ありがとうございます。 >クロス集計のようなことをやりたいのですよね? そのとおりで、教えていただいたSQLを実行した ところ無事に欲しい結果を得る事が出来ました。 ありがとうございました。