|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Inscription : juin 2002 Messages : 13 ![]() |
Bonjour,
Je dois ecrire une requete pour afficher le chiffre d'affaire d'une société, la colonne pivot est le mois. J'ai une erreur dans la requete mais je ne comprend pas pourquoi ? voici le code de la requete : Code :
le code de l'erreur est : Code :
Cordialement |
||||
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Bonjour,
C'est parce que l'opérateur PIVOT n’existe pas dans SQL Server 2005. Il a été implémenté dans SQL Server 2008. Néanmoins, le mieux est d’effectuer cela côté applicatif, puisque ce n'est pas un opérateur ensembliste. @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#3 | ||||
|
Invité de passage
![]() Inscription : juin 2002 Messages : 13 ![]() |
Bonjour,
Merci pour ta réponse, mais je ne suis pas d'accord, l'opérateur existe bien en SQL 2005, voici le lien MSDN http://msdn.microsoft.com/fr-fr/libr...v=SQL.90).aspx et un petit exemple pour voir : Code :
Code :
A+ |
||||
|
|
00
|
|
|
#4 | |
|
Membre Expert
![]() |
Citation:
Un petit tuto sympas de fadace: http://fadace.developpez.com/mssql/pivot/
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
|
|
#5 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
bonjour
exemple dans lequel PIVOT se trouve après la clause FROM, et non après la clause GROUP BY... que donne ceci (je n'ai pas lu la requete en entier...) Code SQL :
|
||
|
|
00
|
|
|
#6 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
OK, je prend zéro ... Désolé pour la boulette.
J'ai rarement utilisé PIVOT, tellement qu'en fait je n'ai du l'utiliser que sous SQL Server 2008. ça ne change pas que cela ne devrait pas être fait côté base de données, puisque c'est de la présentation ... @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#7 | |||
|
Membre chevronné
![]() ![]() Inscription : juillet 2006 Messages : 1 194 ![]() |
J'ai un léger doute sur le fait de pouvoir utiliser une express telle que DATENAME(month,t_ddat) plutôt qu'une colonne pour le pivot.
De toute façon votre problème est clair : vous devez "encapsuler" (surtout avec un group by). Faites : Code :
Citation:
Pivot et Unpivot sont d'ailleurs très utiles pour normaliser/dé-normaliser. |
|||
|
|
00
|
|
|
#8 | ||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Citation:
C'est de la pure présentation, et j'en veux pour preuve que ce ne sont pas des opérateurs ensemblistes. Citation:
Pour dénormaliser, il faut commencer par normaliser, puis constater un problème de performance qui ne peut être résolu que par dénormalisation. Cela réduit déjà la quantité de dénormalisations, puisque si le modèle de données est correct, les optimisations sont simples. Si néanmoins la dénormalisation est la seule possibilité, les vues indexées répondent très bien à cela. @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||
|
00
|
|
|
#9 | ||
|
Membre chevronné
![]() ![]() Inscription : juillet 2006 Messages : 1 194 ![]() |
Citation:
Ce qui importe c'est de considérer les échanges de données (entre SQL Server et un serveur web par exemple) et, selon, de faire les traitements à l'endroit le plus approprié (et vous connaissez un endroit fort approprié pour faire des opérations ensemblistes). Si PIVOT peut apporter une meilleure lisibilité (du code) et/ou des performances : s'en passer serait aussi maladroit que de se passer de l'agrégation. Attention, faut pas tomber dans le paradigme du prof. Ne perdons pas le contact avec le monde réel dans lequel on ne choisit et ne contrôle pas tout. Citation:
|
||
|
|
00
|
|
|
#10 | ||||
|
Membre Expert
![]() |
Citation:
Citation:
Citation:
Citation:
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
||||
|
|
00
|
|
|
#11 | |||
|
Membre chevronné
![]() ![]() Inscription : juillet 2006 Messages : 1 194 ![]() |
Citation:
Mais si le client, n'est pas un de vos serveurs (une application sur un poste tiers par exemple) on peut à juste titre être tenté de laissé cette charge de travail au poste tiers afin d'épargner nos serveurs. Par ailleurs l'écriture une fois connue (de (UN)PIVOT), est plus vite écrite/lue (et donc maintenue) que la plupart de leurs correspondants dans les langages de programmation du/des client(s). Citation:
Par exemple, on m'avait fort tenu tête sur ce forum quand j'expliquais que l'opérateur APPLY avait un potentiel bien plus large que de seulement appeler des fonctions tables... (ça fera peut-être rire ceux qui ne se souviennent pas avoir juré dur comme fer que c'était leur seul emploie). Il est plus dangereux de se tromper en disant la même chose que tout le monde qu'en disant quelque chose à contre courant. Surtout quand il est si facile pour tout visiteur confiant de copier-coller l'idée majoritaire vers tels et tels blogs et ainsi consolider l'idée fausse générale. Citation:
Toujours est-il que je n'y vois pas l'intérêt d'une vue indexée, et c'est tout ce que je demande. |
|||
|
|
00
|
|
|
#12 | ||
|
Membre Expert
![]() |
Citation:
![]() Citation:
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
||
|
|
00
|
|
|
#13 | |||||||||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Citation:
Un SGBDR c'est fait pour stocker, manipuler et retrouver des données. Par pour les présenter. Citation:
Citation:
Si vous avez envie de faire un modèle de données qui n'est pas normalisé, ça vous regarde. Citation:
Citation:
Dénormaliser, OK, mais encore une fois, faire cela à l'aide de (UN)PIVOT n'est pas ensembliste. Citation:
Il me semble (je suis un profane en dehors des bases de données) qu'il est bien plus simple de programmer cela du côté client. Effectuer la recherche de valeurs en T-SQL se ferait avec du code T-SQL dynamique, qui, s'il est pratique, est bien moins facilement maintenable que du pur code T-SQL. Citation:
Je suppose qu'on a tous l'habitude de tester nos codes et l'on tombe parfois sur des cas particuliers. Ce sont ces cas particuliers que vous exposez comme un cas général de façon régulière ici. Citation:
Citation:
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|||||||||
|
00
|
|
|
#14 | |
|
Membre Expert
![]() |
Citation:
C'est totalement trivial et surtout... complètement dynamique et compilé... Personnellement je ne me suis servi de UNPIVOT que pour un batch SSIS dont les fichiers plats en entrée était dynamique...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com