Web design and hosting, database, cloud and social media solutions that deliver business results
  • Geschäftslösungen
    • Robotische Prozessautomatisierung
    • Software
    • Datenbank-Beratungsdienste
      • Datawarehouse-Dienste
      • Datenintegration
      • PowerBI
      • Werkzeuge
    • Website Design
      • Weblokalisierung und -übersetzung
      • Website Sicherheit
    • Cloud Services
      • Microsoft Azure
    • Microsoft Office
    • Sozialen Medien
  • Akademie
    • Unsere Testumgebung
    • Datenbankdesign lernen
      • SQL Server 2008 Wartungsplan
      • Offene Abfrage abrufen
      • Verwenden von SQL Server Daten
      • Verwenden von SQL Server Datum
      • Verwenden von SQL Server Funktionen
      • Verwenden von SQL Server Pivot-Unpivot
    • Lern Web Design
      • ASP-NET
      • CSS
      • Verwendung von JavaScript
    • Lernen von IT-Diensten
      • Anfordern von SSL und Generierung von PFX-Datei in OpenSSL Simple Steps
  • Über
    • Bloggen
    • Karriere
    • Mannschaft
      • Adrian Ananda
      • Ali Al-Amine
      • Ayse Hur
      • Chester Copperpot
      • Gavin Clayton
      • Sai Gangu
      • Suneel Kumar
      • Surya Mukkamala
    • Mappe
عربى (AR)čeština (CS)Deutsch (DE)English (EN-GB)English (EN-US)Español (ES)فارسی (FA)Français (FR)हिंदी (HI)italiano (IT)日本語 (JA)polski (PL)Português (PT)русский (RU)Türk (TR)中国的 (ZH)

SQL Server verwendet UNPIVOT, um Spalten in Zeilen umzuwandeln

SQL Server, der die UNPIVOT-Funktion in einem realen Szenario verwendet.

Der Fall, um CASE loszuwerden

Verwenden von Pivot / Unpivot

Viele der Projekte, an denen wir gearbeitet haben, betrafen die Arbeit mit Daten, die in einer Tabelle mit den Monaten 1 bis 12 pro Jahr gespeichert sind. Dies ist keine ungewöhnliche Lösung, kann jedoch dazu führen, dass SQL-Anweisungen mit Dutzenden von CASE-Anweisungen aufgebläht werden.

Diese CASE-Anweisungen erschweren die Wartung und können auch zu menschlichen Fehlern führen.

Im Folgenden haben wir einen einfachen Datensatz erstellt, der anhand eines Beispiels aus der Praxis dargestellt wird, und SQL Server verfügt über eine Funktion, mit der Spalten in Zeilen umgewandelt werden.

UnPivIDUnPivYearM1M2M3M4M5M6M7M8M9M10M11M12
12010123456789101112
12011123456789101112
12012123456789101112
22010123456789101112

Der Fall, um CASE loszuwerden

Wenn Sie unter SQL Server 2012 ausgeführt werden, müssen Sie diese Funktion erstellen, die der ab 2012 integrierten DATEFROMPARTS-Funktion entspricht
Mehr: SQL Server-Funktion DATEFROMPARTS für Versionen vor 2012

Der Fall, um CASE loszuwerden

Als nächstes können wir eine temporäre Tabelle erstellen und sie mit den obigen Beispieldaten füllen.

SQL

DECLARE @UnPiv TABLE (UnPivID INT, UnPivYear SMALLINT, M1 INT, M2 INT, M3 INT, M4 INT, M5 INT, M6 INT, M7 INT, M8 INT, M9 INT, M10 INT, M11 INT, M12 INT)INSERT INTO @UnPiv(UnPivID,UnPivYear,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12)SELECT 1,2010,1,2,3,4,5,6,7,8,9,10,11,12INSERT INTO @UnPiv(UnPivID,UnPivYear,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12)SELECT 1,2011,1,2,3,4,5,6,7,8,9,10,11,12INSERT INTO @UnPiv(UnPivID,UnPivYear,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12)SELECT 1,2012,1,2,3,4,5,6,7,8,9,10,11,12INSERT INTO @UnPiv(UnPivID,UnPivYear,M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12)SELECT 2,2010,1,2,3,4,5,6,7,8,9,10,11,12
SELECT UnPivID,UnPivYear,REPLACE(col,'M','') UnPivMonth,dbo.c1bs_DateFromParts(UnPivYear,REPLACE(col,'M',''),1) UnPivDate,DateFromParts(UnPivYear,REPLACE(col,'M',''),1) UnPivDateFrom2012,valFROM @UnPivUNPIVOT (Val FOR col IN (M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12)) unpiv

Der Fall, um CASE loszuwerden

Dies sollte einen Datensatz wie unten zurückgeben.

Results

UnPivIDUnPivYearUnPivMonthUnPivDateUnPivDate2012val
12010101/01/201001/01/20101
12010201/02/201001/02/20102
12010301/03/201001/03/20103
12010401/04/201001/04/20104
12010501/05/201001/05/20105
12010601/06/201001/06/20106
12010701/07/201001/07/20107
12010801/08/201001/08/20108
12010901/09/201001/09/20109
120101001/10/201001/10/201010
120101101/11/201001/11/201011
120101201/12/201001/12/201012
12011101/01/201101/01/20111
12011201/02/201101/02/20112
12011301/03/201101/03/20113
12011401/04/201101/04/20114
12011501/05/201101/05/20115
12011601/06/201101/06/20116
12011701/07/201101/07/20117
12011801/08/201101/08/20118
12011901/09/201101/09/20119
120111001/10/201101/10/201110
120111101/11/201101/11/201111
120111201/12/201101/12/201112
12012101/01/201201/01/20121
12012201/02/201201/02/20122
12012301/03/201201/03/20123
12012401/04/201201/04/20124
12012501/05/201201/05/20125
12012601/06/201201/06/20126
12012701/07/201201/07/20127
12012801/08/201201/08/20128
12012901/09/201201/09/20129
120121001/10/201201/10/201210
120121101/11/201201/11/201211
120121201/12/201201/12/201212
22010101/01/201001/01/20101
22010201/02/201001/02/20102
22010301/03/201001/03/20103
22010401/04/201001/04/20104
22010501/05/201001/05/20105
22010601/06/201001/06/20106
22010701/07/201001/07/20107
22010801/08/201001/08/20108
22010901/09/201001/09/20109
220101001/10/201001/10/201010
220101101/11/201001/11/201011
220101201/12/201001/12/201012

Was this helpful?

Please note, this commenting system is still in final testing.

Author

Copyright Claytabase Ltd 2020

Registered in England and Wales 08985867

RSSLoginLink Cookie-RichtlinieSeitenverzeichnis

Social Media

facebook.com/Claytabaseinstagram.com/claytabase/twitter.com/Claytabaselinkedin.com/company/claytabase-ltd

Get in Touch

+442392064871info@claytabase.comClaytabase Ltd, Unit 3d, Rink Road Industrial Estate, PO33 2LT, United Kingdom
Die Einstellungen auf dieser Seite sind so eingestellt, dass alle Cookies zulässig sind. Diese können auf unserer Cookie Policy & Settings Seite geändert werden. Wenn Sie diese Seite weiter nutzen, stimmen Sie der Verwendung von Cookies zu.
Ousia Logo
Logout
Ousia CMS Loader