1

私は学校からの仕事期間中です。私はSQLの使用に慣れていません....

スーパーバイザーから、行データを取得して列を作成する必要があるユーザー向けのタスクが与えられました。クロス集計ウィザードを使用して、必要なものを取得するための 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

誰かが私にこれを説明するのを手伝ってくれますか? ガイドの方向を教えてください。私は今、一日のより良い部分を探していました.私は学生ですが、これがあまりにも長く笑われることはないと思います. しかし、私は本当に知りたいです!

4

1 に答える 1

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つです。他の誰かがより簡単な代替案を提供する場合に備えて、ご期待ください。:-)

于 2012-04-11T15:33:43.870 に答える