2012-04-11 19 views
1

私は学校からの作業期間です。私はSQLを使用するのが面倒ではありません。私はそれを保持しようとしています....行データを列に変換PIVOTを使用せずにアクセス073

私の監督は私に行データを取得して列を作成する必要があるユーザーのタスクを教えてくれました。クロス集計ウィザードを使用して、自動的にSQLを作成して必要なものを取得しました。

基本的に、我々はこのようなテーブルを持っている:ユーザーが望む何

ReqNumber  Year  FilledFlag(is a checkbox)  FilledBy 

    1   2012    (notchecked)   ITSchoolBoy 
    1   2012    (checked)    GradStudent 
    1   2012    (notchecked)   HighSchooler 
    2  etc, etc. 

はREQ番号、何のすべてのリストを持っていることですが

チェックされている当社の自動ピボットコードは、私たちを与えますすべてのFilledByオプション(合計で9個)を列ヘッダーとして使用し、すべてをreqnumberでグループ化します。

どのようにピボットなしでこれを行うことができますか?私はこれの周りに頭を包みたい。私が見つけることができる最も近いものは次のようなものです:

SELECT 
    SUM(IIF(FilledBy = 'ITSchoolboy',1,0) as ITSchoolboy, 
    SUM(IIF(FilledBy = 'GradStudent',1,0) as GradStudent, etc. 
FROM myTable 

誰かが私にこれを説明するのに役立つでしょうか?ガイドの指示に私を向ける?私は今一日のうちに良いところを探しています。私は学生ですが、これがあまりにも長く笑われるとは思わないのです。しかし、私は本当に知りたいです!

+0

ピボットの使用を避けるのではなく、ちょうど私が言語に慣れていないので、別のやり方をする方法を学びたいと思います。私の上司は、彼が「純粋なSQL」にもっと慣れているので、別のやり方(上記の方法)をすると言ってくれました。私は自分の知識を増やすことを知りたいと思うと思うのですが(ひどい英語には申し訳ありません)。 – mrwienerdog

+0

あなたたちみんな - 観察的(そして賢い!)。我々は年の列を使用していない、それは学生の雇用を追跡するために使用されるテーブルなので、現在の年のものとみなされます(注文は昨年度に行われた可能性があります)。 – mrwienerdog

答えて

1

GROUP BY ReqNumberを使用すると、あなたの上司の提案がうまくいくと思います。

SELECT 
    ReqNumber, 
    SUM(IIF(FilledBy = 'ITSchoolboy',1,0) as ITSchoolboy, 
    SUM(IIF(FilledBy = 'GradStudent',1,0) as GradStudent, 
    etc. 
FROM myTable 
GROUP BY ReqNumber; 

異なるアプローチは、複数のサブクエリを結合することです。この例では、2つのカテゴリを取得します。あなたが9つのカテゴリにそれを拡張する必要がある場合は、あなたは多くの参加を続けます。

SELECT 
    itsb.ReqNumber, 
    itsb.ITSchoolboy, 
    grad.GradStudent 
FROM 
    (
     SELECT 
      ReqNumber, 
      FilledFlag AS ITSchoolboy 
     FROM myTable 
     WHERE FilledBy = "ITSchoolboy" 
    ) AS itsb 
    INNER JOIN 
    (
     SELECT 
      ReqNumber, 
      FilledFlag AS GradStudent 
     FROM myTable 
     WHERE FilledBy = "GradStudent" 
    ) AS grad 
    ON itsb.ReqNumber = grad.ReqNumber 

注意してください、私はあなたがこのアプローチを使用する必要があります示唆していませんよ。しかし、あなたのピボットアプローチ(これはうまくいく)の代替案について尋ねたので、これは1つです。他の誰かがより簡単な選択肢を提供してくれるかどうかに注目してください。 :-)

+0

おかげで、私はちょうどこれらのものが(一般的に)どのように機能するかを学びたいと思う。私はあなたの助言に従い、時計を守ります。そして、私は同意する、それは参加するのはひどくたくさんあるだろう.... – mrwienerdog

+0

ピボットの存在のためにかなり説得力のあるケースを作成します。 :-) Pivotは、特にウィザードを使用してガイドすることができれば、扱いにくい問題を簡単に解決できます。 – HansUp

+1

PIVOTが利用できなかったこの状況(または特にウィザード - あなたは明らかに便利ですが、そのうちの1つを使用して多くを学ぶことはありません)に対処した場合、私はほとんど尋ねました。 – mrwienerdog

関連する問題