SQL Server Tableau croisé dynamique avec des comptes et des Sommes
J'essaye de faire un Serveur SQL de tableau croisé dynamique de travail qui me permet de compter et puis additionner un nombre de colonnes (6 au total). Le but du tableau croisé dynamique est à l'agrégation en ligne les résultats d'un questionnaire pour un certain nombre de sites de production. Il y a 6 questions qui peuvent avoir 3 valeurs de résultat - Cible, de l'Action et de l'Échec. Ce que j'essaie de faire est de compter le nombre de Cible, de l'Action et de l'Échec pour chaque question, puis de résumer cela pour chaque. Ainsi, par exemple, le Site de Production pourrait avoir 2, 2 et 2 Échouer.
Ma compréhension est que le Serveur SQL de tableau croisé dynamique peut fournir cette information, qui peuvent ensuite être affichées en ASP.Net ReportViewer. Ci-dessous mon code, mais ça ne fonctionne pas, et pourrait faire avec un peu l'aide d'un expert:
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
Est-il un moyen de les contourner cela, ou est-Pivot table pas la solution?
Table est
Production_Site,
Grocery_Packaging_And_Coding,
Grocery_Measurable,
Grocery_Appearance,
Grocery_Aroma,
Grocery_Flavour,
Grocery_Texture
Données de la table comme ceci:
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
Le résultat que je cherche, c'est
Production_Site | Target | Action | Fail
Site A 10 1 1
Site B 4 1 1
Site C 6 0 0
- pouvez-vous fournir la structure de la table, quelques exemples de données et ensuite le résultat souhaité de l'
PIVOT
? - Je garde ça pour les principales données - vérifier la question d'origine pour plus de détails
- Ce qui ne fonctionne pas? Vous pouvez configurer SQL Violon exemple?
- Juste ajouté un peu de structure de table, de données et un exemple de résultat, je suis en train de réaliser
Vous devez vous connecter pour publier un commentaire.
Un moyen beaucoup plus facile pour exécuter cette requête serait d'appliquer à la fois la
UNPIVOT
et puis lePIVOT
fonctions:Voir SQL jouer avec la Démo
La
UNPIVOT
prend votre liste de colonnes et de les transformer en de multiples lignes qui le rend beaucoup plus facile de compter:Unpivot Résultat:
Puis en appliquant la
PIVOT
à cela permettra d'obtenir le nombre que vous souhaitez pour chacun desPRODUCTION_SITE
s. Après l'ajout de laPIVOT
le résultat est:WHERE
clause de limiter des résultats similaires à ce -- sqlfiddle.com/#!3/cd888/23 - vous pouvez même appliquer uneWHERE
clause à l'intérieurUNPIVOT
requête