1

背景:id、full_name、position_7、position_8、position_9などの見出しを持つテーブルを表示しようとしています。人が7月と8月のアクティブな従業員だった場合、2012_Julと2012_Augはposition_7と8に表示されます。一行で。GROUP BYを使用しない場合、出力は2行で取得されます。これが発生する理由は、BLMthsテーブルでは、1か月以上雇用されているため、1人の人が複数のエントリを持つためです。

以下のクエリは、すべての人のID、full_name、およびmonthを正常に取得します...GROUPBYを使用しない場合。ただし、問題は、GROUP BYの使用を怠ると、テーブル内の各人に4行(またはそれ以上)が表示されることです。GROUP BYを使用すると、1人あたり1行の出力が必要になりますが、テーブルに必要なデータがすべて揃っているわけではありません。

誰かが私が間違っていることを知っていますか?または、GROUP BYを使用すると、一部のCASEステートメントのデータが欠落しているように見える理由を誰かが知っていますか?

これに対する答えは単純でなければならないことは知っていますが、私はそれを解決できないようです。どんな助けでも大歓迎です。よろしくお願いします。

SELECT Blm.Ags, Blmths.Id, Ie.Full_Name, Blmths.Month,
       CASE month
       WHEN "2012-07-01" THEN 1
           ELSE NULL
       END AS Position_7,
       CASE month
       WHEN "2012-08-01" THEN Date_Format(Blmths.Month, '%Y_%b')
           ELSE NULL
       END AS Position_8,
       CASE Blmths.Month
       WHEN "2012-09-01" THEN Date_Format(Blmths.Month, '%Y_%b')
           ELSE NULL
       END AS Position_9,
       CASE month
       WHEN "2012-10-01" THEN Date_Format(Blmths.Month, '%Y_%b')
           ELSE NULL
       END AS Position_10,
       CASE Blmths.Month
       WHEN "2012-11-01" THEN Date_Format(Blmths.Month, '%Y_%b')
           ELSE NULL
       END AS Position_11,
       CASE Blmths.Month
       WHEN "2012-12-01" THEN Date_Format(Blmths.Month, '%Y_%b')
           ELSE NULL
       END AS Position_12,
       CASE month
       WHEN '2013-01-01' THEN Date_Format(Blmths.Month, '%Y_%b')
           ELSE NULL
       END AS Position_1,
       CASE month
       WHEN "2013-02-01" THEN Date_Format(Blmths.Month, '%Y_%b')
           ELSE NULL
       END AS Position_2,
       CASE month
       WHEN "2012-03-01" THEN Date_Format(Blmths.Month, '%Y_%b')
           ELSE NULL
       END AS Position_3,
       CASE Blmths.Month
       WHEN "2013-04-01" THEN Date_Format(Blmths.Month, '%Y_%b')
           ELSE NULL
       END AS Position_4,
       CASE Blmths.Month
       WHEN "2013-05-01" THEN Date_Format(Blmths.Month, '%Y_%b')
           ELSE NULL
       END AS Position_5,
       CASE Blmths.Month
       WHEN "2013-06-01" THEN Date_Format(Blmths.Month, '%Y_%b')
           ELSE NULL
       END AS Position_6
  FROM Bogus_Leadership_Months AS Blmths, Injection_Employees AS Ie,
Bogus_Leadership_Members AS Blm
  WHERE Blmths.Id = Blm.Id
    AND Ie.Ags = Blm.Ags
    AND Ie.Centre_Id = '666'
  GROUP BY Blm.Ags
4

2 に答える 2

2

より具体的にする必要があります。これはどのデータベースに対するものですか? どのようにうまくいかなかったのですか?エラーが発生したか、必要な結果が返されませんでしたか? 「テーブルに必要なデータがすべてではありません」とはどういう意味ですか?

1 人あたり複数のレコードがある場合、どのようにデータを集計しますか?

これらの行に沿って何かが必要になるかもしれないと思います(短縮):

SELECT Blm.Ags, Blmths.Id, Ie.Full_Name,
   SUM(CASE Blmths.month
   WHEN "2012-07-01" THEN 1
       ELSE NULL
   END) AS Position_7
FROM Bogus_Leadership_Months AS Blmths, Injection_Employees AS Ie,
Bogus_Leadership_Members AS Blm
  WHERE Blmths.Id = Blm.Id
    AND Ie.Ags = Blm.Ags
    AND Ie.Centre_Id = '666'
  GROUP BY Blm.Ags, Blmths.Id, Ie.Full_Name

これにより、その人の月ごとの集計が行われます。

お探しのデータの例が見当たりません - 再投稿していただけますか?

于 2012-11-05T23:56:11.460 に答える
0
 SELECT max(Blmths.Id), Ie.Full_Name, Blmths.Month,Blm.Ags FROM 
    (SELECT Blm.Ags,Blmths.Id, Ie.Full_Name, Blmths.Month 
    CASE month
           WHEN "2012-07-01" THEN 1
               ELSE NULL
           END AS Position_7,
           CASE month
           WHEN "2012-08-01" THEN Date_Format(Blmths.Month, '%Y_%b')
               ELSE NULL
           END AS Position_8,
           CASE Blmths.Month
           WHEN "2012-09-01" THEN Date_Format(Blmths.Month, '%Y_%b')
               ELSE NULL
           END AS Position_9,
           CASE month
           WHEN "2012-10-01" THEN Date_Format(Blmths.Month, '%Y_%b')
               ELSE NULL
           END AS Position_10,
           CASE Blmths.Month
           WHEN "2012-11-01" THEN Date_Format(Blmths.Month, '%Y_%b')
               ELSE NULL
           END AS Position_11,
           CASE Blmths.Month
           WHEN "2012-12-01" THEN Date_Format(Blmths.Month, '%Y_%b')
               ELSE NULL
           END AS Position_12,
           CASE month
           WHEN '2013-01-01' THEN Date_Format(Blmths.Month, '%Y_%b')
               ELSE NULL
           END AS Position_1,
           CASE month
           WHEN "2013-02-01" THEN Date_Format(Blmths.Month, '%Y_%b')
               ELSE NULL
           END AS Position_2,
           CASE month
           WHEN "2012-03-01" THEN Date_Format(Blmths.Month, '%Y_%b')
               ELSE NULL
           END AS Position_3,
           CASE Blmths.Month
           WHEN "2013-04-01" THEN Date_Format(Blmths.Month, '%Y_%b')
               ELSE NULL
           END AS Position_4,
           CASE Blmths.Month
           WHEN "2013-05-01" THEN Date_Format(Blmths.Month, '%Y_%b')
               ELSE NULL
           END AS Position_5,
           CASE Blmths.Month
           WHEN "2013-06-01" THEN Date_Format(Blmths.Month, '%Y_%b')
               ELSE NULL
           END AS Position_6
      FROM Bogus_Leadership_Months AS Blmths, Injection_Employees AS Ie,
    Bogus_Leadership_Members AS Blm
      WHERE Blmths.Id = Blm.Id
        AND Ie.Ags = Blm.Ags
        AND Ie.Centre_Id = '666') AS GRPBYCOL 
   GROUP BY  Ie.Full_Name, Blmths.Month,Blm.Ags,GRPBYCOL 
于 2012-11-05T09:19:35.897 に答える