{"id":1508,"date":"2024-03-13T07:08:00","date_gmt":"2024-03-13T06:08:00","guid":{"rendered":"https:\/\/expert-only.com\/?p=1508"},"modified":"2024-03-13T10:53:31","modified_gmt":"2024-03-13T09:53:31","slug":"requete-sql-server-unpivot","status":"publish","type":"post","link":"https:\/\/expert-only.com\/fr\/t-sql\/requete-sql-server-unpivot\/","title":{"rendered":"Exemple de Requ\u00eate SQL Server UNPIVOT"},"content":{"rendered":"\n<p><strong>Dans cet article, apprenez \u00e0 transposer des colonnes en lignes avec une seule requ\u00eate T-SQL et avec l&rsquo;op\u00e9rateur UNPIVOT.<\/strong><\/p>\n\n\n\n<p>La syntaxe de cette requ\u00eate est complexe car non intuitive, cet exemple concret transforme les colonnes d&rsquo;une table de ventes en lignes. Les cas de figures classiques sont une gestion facilit\u00e9e des donn\u00e9es, comme par exemple une gestion g\u00e9n\u00e9rique d&rsquo;un champ, et non une gestion pour chaque colonne.<\/p>\n\n\n\n<p>Par exemple, il est possible de calculer des sommes avec des <a href=\"https:\/\/expert-only.com\/fr\/t-sql\/requete-select-case-when-en-t-sql\/\"><strong>CASE WHEN<\/strong><\/a> et non plus en \u00e9crivant en dur le nom des colonnes dans les scripts. <\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_83 ez-toc-wrap-center counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/expert-only.com\/fr\/t-sql\/requete-sql-server-unpivot\/#1-creer-la-table-sql-server-a-transformer-en-ligne-avec-unpivot\" >1. Cr\u00e9er la table SQL Server \u00e0 transformer en ligne avec UNPIVOT<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/expert-only.com\/fr\/t-sql\/requete-sql-server-unpivot\/#2-requete-pour-inserer-des-lignes-dans-la-table-source\" >2. Requ\u00eate pour ins\u00e9rer des lignes dans la table source<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/expert-only.com\/fr\/t-sql\/requete-sql-server-unpivot\/#3-exemple-de-requete-sql-server-unpivot-pour-transposer-les-donnees-en-lignes\" >3. Exemple de requ\u00eate SQL Server UNPIVOT pour transposer les donn\u00e9es en lignes<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\" id=\"h-1-creer-la-table-sql-server-a-transformer-en-ligne-avec-unpivot\"><span class=\"ez-toc-section\" id=\"1-creer-la-table-sql-server-a-transformer-en-ligne-avec-unpivot\"><\/span>1. Cr\u00e9er la table SQL Server \u00e0 transformer en ligne avec UNPIVOT<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Premi\u00e8rement, on comm, soit douze nce par cr\u00e9er la table utilis\u00e9e pour notre exemple. Elle a une colonne qui contient le type de ventes et une colonne pour chaque mois de l&rsquo;ann\u00e9e, soit 12 colonnes \u00e0 transposer vers les lignes.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"mssql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">-- Tester et supprimer la table des ventes \n-- si elle est pr\u00e9sente dans la base de donn\u00e9es\nIF EXISTS ( \tSELECT 1 FROM sys.objects\u00a0\n\t\t\tWHERE  object_id = object_id(N'[dbo].[VENTES_TYPES]')\u00a0\n\t\t\t\tAND type in (N'U') \n\t\t)\nBEGIN \n\tDROP TABLE [dbo].[VENTES_TYPES]\nEND;\n\n-- Cr\u00e9er la table d'exemple des VENTES\nCREATE TABLE [dbo].[VENTES_TYPES] \n(\n  [TYPE_VENTE] nvarchar(20),\n  [Janvier] numeric(5),\n  [F\u00e9vrier] numeric(5),\n  [Mars] numeric(5),\n  [Avril] numeric(5),\n  [Mai] numeric(5),\n  [Juin] numeric(5),\n  [Juillet] numeric(5),\n  [Ao\u00fbt] numeric(5),\n  [Septembre] numeric(5),\n  [Octobre] numeric(5),\n  [Novembre] numeric(5),\n  [D\u00e9cembre] numeric(5)\n); \n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-2-requete-pour-inserer-des-lignes-dans-la-table-source\"><span class=\"ez-toc-section\" id=\"2-requete-pour-inserer-des-lignes-dans-la-table-source\"><\/span>2. Requ\u00eate pour ins\u00e9rer des lignes dans la table source<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Ensuite, ins\u00e9rer les donn\u00e9es dans la table \u00e0 transposer, chaque <a href=\"https:\/\/expert-only.com\/fr\/t-sql\/sql-server-insert-into-avec-des-variables\/\"><strong>insertion de donn\u00e9es SQL<\/strong><\/a> ajoute 12 nouveaux montants de ventes. Soit une colonne par mois, avec le type de vente associ\u00e9.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"mssql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">INSERT INTO [VENTES_TYPES] VALUES ('Ventes Directes', 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000, 11000, 12000);\nINSERT INTO [VENTES_TYPES] VALUES ('Rabais', 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120);\nINSERT INTO [VENTES_TYPES] VALUES ('Avoirs', 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60);\nINSERT INTO [VENTES_TYPES] VALUES ('Retours', 25, 50, 75, 100, 125, 150, 175, 200, 225, 250, 275, 300);\n\nSELECT * FROM [dbo].[VENTES_TYPES];\n<\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"https:\/\/expert-only.com\/wp-content\/uploads\/2017\/09\/creation_table_transposer_select.png\"><img loading=\"lazy\" decoding=\"async\" width=\"987\" height=\"294\" src=\"https:\/\/expert-only.com\/wp-content\/uploads\/2017\/09\/creation_table_transposer_select.png\" alt=\"Insertion des lignes avant utilisation de la requ\u00eate SQL Server Unpivot\" class=\"wp-image-1538\" srcset=\"https:\/\/expert-only.com\/wp-content\/uploads\/2017\/09\/creation_table_transposer_select.png 987w, https:\/\/expert-only.com\/wp-content\/uploads\/2017\/09\/creation_table_transposer_select-300x89.png 300w, https:\/\/expert-only.com\/wp-content\/uploads\/2017\/09\/creation_table_transposer_select-768x229.png 768w\" sizes=\"auto, (max-width: 987px) 100vw, 987px\" \/><\/a><figcaption class=\"wp-element-caption\">Insertion des lignes avant utilisation de la requ\u00eate SQL Server Unpivot<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-3-exemple-de-requete-sql-server-unpivot-pour-transposer-les-donnees-en-lignes\"><span class=\"ez-toc-section\" id=\"3-exemple-de-requete-sql-server-unpivot-pour-transposer-les-donnees-en-lignes\"><\/span>3. Exemple de requ\u00eate SQL Server UNPIVOT pour transposer les donn\u00e9es en lignes<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Enfin, \u00e9crire et ex\u00e9cuter maintenant la requ\u00eate avec UNPIVOT, pour transformer les colonnes en lignes. C&rsquo;est \u00e0 dire que pour chaque type de vente et chaque mois en colonnes, on obtient une nouvelle ligne. Soit 4 types de ventes * 12 mois = 48 lignes transpos\u00e9es.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"mssql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">SELECT\tType_Vente, \n\tMois, \n\tMontant\nFROM (\t\n  SELECT Type_Vente, \n\t Janvier, F\u00e9vrier, Mars, Avril, Mai, Juin, Juillet, Ao\u00fbt, Septembre, Octobre, Novembre, D\u00e9cembre\n  FROM [dbo].[VENTES_TYPES]\n) VT\n\nUNPIVOT\n\n ( Montant FOR Mois IN \n    (Janvier, F\u00e9vrier, Mars, Avril, Mai, Juin, Juillet, Ao\u00fbt, Septembre, Octobre, Novembre, D\u00e9cembre)\n )\nAS VT_Transposee;\n<\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><a href=\"https:\/\/expert-only.com\/wp-content\/uploads\/2017\/09\/requete_unpivot_colonnes_vers_ligne_sql_server-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"908\" height=\"600\" src=\"https:\/\/expert-only.com\/wp-content\/uploads\/2017\/09\/requete_unpivot_colonnes_vers_ligne_sql_server-1.png\" alt=\"Exemple de requ\u00eate SQL Server UNPIVOT pour transformer les colonnes en lignes depuis SSMS\" class=\"wp-image-1539\" style=\"width:908px;height:auto\" srcset=\"https:\/\/expert-only.com\/wp-content\/uploads\/2017\/09\/requete_unpivot_colonnes_vers_ligne_sql_server-1.png 908w, https:\/\/expert-only.com\/wp-content\/uploads\/2017\/09\/requete_unpivot_colonnes_vers_ligne_sql_server-1-300x198.png 300w, https:\/\/expert-only.com\/wp-content\/uploads\/2017\/09\/requete_unpivot_colonnes_vers_ligne_sql_server-1-768x507.png 768w\" sizes=\"auto, (max-width: 908px) 100vw, 908px\" \/><\/a><figcaption class=\"wp-element-caption\"><em>Exemple de requ\u00eate SQL Server UNPIVOT pour transformer les colonnes en lignes depuis SSMS<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"h-a-propos-des-requetes-t-sql-unpivot-et-pivot\">A propos des requ\u00eates T-SQL UNPIVOT et PIVOT<\/h3>\n\n\n\n<p>En guise de conclusion, cet article illustre par un exemple pratique l&rsquo;utilisation de la requ\u00eate simplifi\u00e9e pour exploiter la fonction ou op\u00e9rateur UNPIVOT de SQL Server. Gr\u00e2ce \u00e0 ce script T-SQL, il devient possible de d\u00e9composer des ensembles de donn\u00e9es en s\u00e9parant les lignes et leurs colonnes correspondantes.<\/p>\n\n\n\n<p> Pour ceux d\u00e9sireux d&rsquo;approfondir leurs connaissances, voici un lien vers un article compl\u00e9mentaire, d\u00e9di\u00e9 cette fois \u00e0 l&rsquo;op\u00e9rateur oppos\u00e9: <strong><a href=\"https:\/\/expert-only.com\/fr\/t-sql\/pivot-sql-server\/\">le PIVOT de SQL Server<\/a><\/strong>. Code T-SQL \u00e0 ne pas confondre avec la m\u00e9thode de <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Tri_rapide\" target=\"_blank\" rel=\"noreferrer noopener\">tri pivot<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-wp-embed is-provider-tutoriels-sql-et-it wp-block-embed-tutoriels-sql-et-it\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"8p0COItBuO\"><a href=\"https:\/\/expert-only.com\/fr\/t-sql\/pivot-sql-server\/\">Exemple de Requ\u00eate PIVOT SQL Server<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"\u00ab\u00a0Exemple de Requ\u00eate PIVOT SQL Server\u00a0\u00bb &#8212; Tutoriels SQL et IT\" src=\"https:\/\/expert-only.com\/fr\/t-sql\/pivot-sql-server\/embed\/#?secret=nG2gjb6gRt#?secret=8p0COItBuO\" data-secret=\"8p0COItBuO\" width=\"500\" height=\"282\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p>Dans cet article, apprenez \u00e0 transposer des colonnes en lignes avec une seule requ\u00eate T-SQL et avec l&rsquo;op\u00e9rateur UNPIVOT. La syntaxe de cette requ\u00eate est complexe car non intuitive, cet exemple concret transforme les colonnes d&rsquo;une table de ventes <a class=\"mh-excerpt-more\" href=\"https:\/\/expert-only.com\/fr\/t-sql\/requete-sql-server-unpivot\/\" title=\"Exemple de Requ\u00eate SQL Server UNPIVOT\">&#8230;<\/a><\/p>\n<\/div>","protected":false},"author":1,"featured_media":10757,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"class_list":{"0":"post-1508","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-t-sql"},"_links":{"self":[{"href":"https:\/\/expert-only.com\/fr\/wp-json\/wp\/v2\/posts\/1508","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/expert-only.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/expert-only.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/expert-only.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/expert-only.com\/fr\/wp-json\/wp\/v2\/comments?post=1508"}],"version-history":[{"count":11,"href":"https:\/\/expert-only.com\/fr\/wp-json\/wp\/v2\/posts\/1508\/revisions"}],"predecessor-version":[{"id":30653,"href":"https:\/\/expert-only.com\/fr\/wp-json\/wp\/v2\/posts\/1508\/revisions\/30653"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/expert-only.com\/fr\/wp-json\/wp\/v2\/media\/10757"}],"wp:attachment":[{"href":"https:\/\/expert-only.com\/fr\/wp-json\/wp\/v2\/media?parent=1508"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/expert-only.com\/fr\/wp-json\/wp\/v2\/categories?post=1508"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/expert-only.com\/fr\/wp-json\/wp\/v2\/tags?post=1508"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}