10

SQL Serverピボットテーブルを機能させようとしています。これにより、列の数を数えてから合計できます(合計6つ)。ピボット テーブルの目的は、任意の数の本番サイトのオンライン アンケート結果を集計することです。3 つの結果値 (Target、Action、Fail) を持つことができる 6 つの質問があります。私がやろうとしているのは、各質問のターゲット、アクション、失敗の数を数え、それぞれを合計することです。したがって、たとえば、本番サイト A には 2 つのターゲット、2 つのアクション、および 2 つの失敗があります。

私の理解では、SQL Server ピボット テーブルがこの情報を提供し、ASP.Net ReportViewer に表示できるということです。以下は私のコードですが、機能していません。専門家の助けが必要です。

     SELECT PRODUCTION_Site,
     [Target],
     [Action],
     [Fail]
     FROM
     (SELECT Production_Site,
             SUM(Coding),
             SUM(Measurable),
             SUM(Appearance),
             SUM(Aroma),
             SUM(Flavour),
             SUM(Texture)
               FROM t_Pqe_Grocery
               GROUP BY Production_Site) AS T
          PIVOT
         (
           COUNT(Coding) FOR Grocery_Packaging_And_Coding IN ([Target],[Action],[Fail])
           COUNT(Measurable) FOR Grocery_Measurable IN ([Target],[Action],[Fail])
           COUNT(Appearance) FOR Grocery_Appearance IN ([Target],[Action],[Fail])
           COUNT(Aroma) FOR Grocery_Aroma IN ([Target],[Action],[Fail])
           COUNT(Flavour) FOR Grocery_Flavour IN ([Target],[Action],[Fail])
           COUNT(Texture) FOR Grocery_Texture IN ([Target],[Action],[Fail])) AS P

これを回避する方法はありますか、それともピボットテーブルは解決策ではありませんか?

テーブルは

Production_Site,
Grocery_Packaging_And_Coding,
Grocery_Measurable,
Grocery_Appearance,
Grocery_Aroma,
Grocery_Flavour,
Grocery_Texture

テーブル内のデータは次のようになります。

Site A, Target, Action, Fail, Target, Target, Target
Site B, Target, Action, Fail, Target, Target, Target
Site C, Target, Target, Target, Target, Target, Target
Site A, Target, Target, Target, Target, Target, Target

私が探している結果は

Production_Site | Target | Action | Fail
Site A              10       1       1
Site B               4       1       1
Site C               6       0       0
4

1 に答える 1

14

このクエリを実行するはるかに簡単な方法UNPIVOTは、関数とPIVOT関数の両方を適用することです。

select *
from
(
  select Production_Site, value 
  from t_Pqe_Grocery
  unpivot
  (
    value
    for col in (Grocery_Packaging_And_Coding, Grocery_Measurable,
                Grocery_Appearance, Grocery_Aroma, 
                Grocery_Flavour, Grocery_Texture)
  ) unp
) src
pivot
(
  count(value)
  for value in ([Target], [Action], [Fail])
) piv

SQL FiddlewithDemoを参照してください

UNPIVOT列リストを取得し、それを複数の行に変換します。これにより、カウントがはるかに簡単になります。

select Production_Site, value 
from t_Pqe_Grocery
unpivot
(
  value
  for col in (Grocery_Packaging_And_Coding, Grocery_Measurable,
              Grocery_Appearance, Grocery_Aroma, 
              Grocery_Flavour, Grocery_Texture)
) unp

ピボット解除の結果:

| PRODUCTION_SITE |  VALUE |
----------------------------
|          Site A | Target |
|          Site A | Action |
|          Site A |   Fail |
|          Site A | Target |
|          Site A | Target |
|          Site A | Target |
|          Site B | Target |
|          Site B | Action |
|          Site B |   Fail |
|          Site B | Target |
|          Site B | Target |
|          Site B | Target |
|          Site C | Target |
|          Site C | Target |
|          Site C | Target |
|          Site C | Target |
|          Site C | Target |
|          Site C | Target |
|          Site A | Target |
|          Site A | Target |
|          Site A | Target |
|          Site A | Target |
|          Site A | Target |
|          Site A | Target |

次に、PIVOTこれにを適用すると、のそれぞれに必要なカウントが得られますPRODUCTION_SITEPIVOT結果を追加すると、次のようになります。

| PRODUCTION_SITE | TARGET | ACTION | FAIL |
--------------------------------------------
|          Site A |     10 |      1 |    1 |
|          Site B |      4 |      1 |    1 |
|          Site C |      6 |      0 |    0 |
于 2012-11-16T13:13:45.337 に答える