2017-10-27 3 views
0

Gegenwärtig habe ich eine mehrfache Auswahlfrage, die die Daten zieht, die als ich die Vertragslänge haben muss, die in getrennte Monate geteilt wird und den Betrag auch geteilt hat. Heres ein vereinfachtes Beispiel der aktuellen Tabelle:Daten strukturieren, um 3. Dimension zu erlauben SQL

Month  Contract Length Client Client Details Amount 

Jan'17  12 months  Client1  Details 1  1200 
Feb'17  3 months  Client2  Details 2  600 
Nov'17  15 months  Client3  Details 3  30000 

davon, dass ich brauchen würde, um etwas zu erhalten, die wie folgt aussehen würde:

Client Client Details |... Jan'17 Feb'17 Mar'17 Apr'17 .... Sep'17 Oct' 17 Nov'17 Dec'17...| 

Client1 Details 1   100  100  100  100   100 100  100  100 
Client2 Details 2      200  200  200 
Client3 Details 3                 2000 2000 

Dachte darüber, dass eine Abfrage hinzuzufügen Spalten für jeden Monat von jedem Jahr und dann diesen einzelnen Monat Wert in diese spezifische Spalte, aber die Daten sind rund 8 Jahre, hätte also ein bisschen zu viele Spalten und selbst wenn das der Weg zu gehen ist, bin ich immer noch nicht sicher, wie man eine solche Abfrage formuliert. Gibt es Vorschläge, wie man es angehen könnte?

Danke, Lukas

+1

Wo zeigen Sie diese Daten an? Diese Art von Dingen wird normalerweise am besten in Ihrer Präsentationsebene behandelt. – iamdave

+0

Viele Benutzer benutzen Excel, also müssen Sie die Tabelle für Excel - Pivots geeignet machen. – JustLukas

Antwort

1

Wenn dies SSRS oder ähnliches herausgeführt wird, dann wird Ihre Abfrage in Ordnung ist, lassen Sie Ihre Präsentationsschicht damit umgehen.

Wenn Sie dies nur in SQL benötigen, suchen Sie nach Informationen zu PIVOT TABLES. Es ist gut dokumentiert, sobald Sie wissen, was Sie suchen.

+0

Hallo, ich bin mit Pivot - Tabellen gut vertraut, aber ich glaube nicht, dass es eine einfache Möglichkeit gibt, mit ihnen zu arbeiten (mit einfachen Pivots und nicht Power Pivots oder eine solche). Die einzige Möglichkeit für das Pivot, es zu zeigen, ist das Hinzufügen von zusätzlichen Spalten zur Tabelle – JustLukas

+0

Wenn Sie nach einer Ausgabe mit variablen Spalten statt festen suchen, dann ist dynamisches SQL wahrscheinlich der einzige Weg zu gehen. Ich habe ein Beispiel für dynamische SQL, die eine Ansicht mit dem Drehpunkt erstellt. Sie können es wahrscheinlich anpassen, um nur als Auswahl zu fungieren. Da es Teil unseres Licve-Systems ist, werde ich hier nicht posten, kann es aber per E-Mail/PM versenden, wenn Sie diesen Weg gehen wollen. –

+0

Es wäre auf jeden Fall sehr interessant, ein Beispiel zu sehen! – JustLukas

0

Beispiel für Pivot-Tabelle Verwendung dafür:

BEGIN TRAN 

CREATE TABLE dbo.PivotExample (Country NVARCHAR(50) NULL 
            ,Year SMALLINT NOT NULL 
            ,SalesAmount MONEY NULL 
           ) 
GO 

INSERT dbo.PivotExample 
     (Country, Year, SalesAmount) 
VALUES (N'Australia', 2005, 1309047.1978) 
INSERT dbo.PivotExample 
     (Country, Year, SalesAmount) 
VALUES (N'Germany', 2006, 521230.8475) 
INSERT dbo.PivotExample 
     (Country 
     ,Year 
     ,SalesAmount 
     ) 
VALUES (N'United States' 
     ,2007 
     ,2838512.3550 
     ) 
INSERT dbo.PivotExample 
     (Country, Year, SalesAmount) 
VALUES (N'France', 2008, 922179.0400) 
INSERT dbo.PivotExample 
     (Country, Year, SalesAmount) 
VALUES (N'Australia', 2007, 3033784.2131) 
INSERT dbo.PivotExample 
     (Country, Year, SalesAmount) 
VALUES (N'France', 2005, 180571.6920) 
INSERT dbo.PivotExample 
     (Country 
     ,Year 
     ,SalesAmount 
     ) 
VALUES (N'United Kingdom' 
     ,2006 
     ,591586.8540 
     ) 
INSERT dbo.PivotExample 
     (Country, Year, SalesAmount) 
VALUES (N'Canada', 2006, 621602.3823) 
INSERT dbo.PivotExample 
     (Country 
     ,Year 
     ,SalesAmount 
     ) 
VALUES (N'United Kingdom' 
     ,2005 
     ,291590.5194 
     ) 
INSERT dbo.PivotExample 
     (Country 
     ,Year 
     ,SalesAmount 
     ) 
VALUES (N'United States' 
     ,2005 
     ,1100549.4498 
     ) 
INSERT dbo.PivotExample 
     (Country, Year, SalesAmount) 
VALUES (N'Canada', 2007, 535784.4624) 
INSERT dbo.PivotExample 
     (Country, Year, SalesAmount) 
VALUES (N'France', 2007, 1026324.9692) 
INSERT dbo.PivotExample 
     (Country, Year, SalesAmount) 
VALUES (N'Germany', 2007, 1058405.7305) 
INSERT dbo.PivotExample 
     (Country, Year, SalesAmount) 
VALUES (N'Australia', 2006, 2154284.8835) 
INSERT dbo.PivotExample 
     (Country 
     ,Year 
     ,SalesAmount 
     ) 
VALUES (N'United Kingdom' 
     ,2008 
     ,1210286.2700 
     ) 
INSERT dbo.PivotExample 
     (Country 
     ,Year 
     ,SalesAmount 
     ) 
VALUES (N'United States' 
     ,2008 
     ,3324031.1600 
     ) 
INSERT dbo.PivotExample 
     (Country, Year, SalesAmount) 
VALUES (N'Germany', 2008, 1076890.7700) 
INSERT dbo.PivotExample 
     (Country 
     ,Year 
     ,SalesAmount 
     ) 
VALUES (N'United Kingdom' 
     ,2007 
     ,1298248.5675 
     ) 
INSERT dbo.PivotExample 
     (Country, Year, SalesAmount) 
VALUES (N'Australia', 2008, 2563884.2900) 
INSERT dbo.PivotExample 
     (Country, Year, SalesAmount) 
VALUES (N'Canada', 2005, 146829.8074) 
INSERT dbo.PivotExample 
     (Country, Year, SalesAmount) 
VALUES (N'Germany', 2005, 237784.9902) 
INSERT dbo.PivotExample 
     (Country, Year, SalesAmount) 
VALUES (N'Canada', 2008, 673628.2100) 
INSERT dbo.PivotExample 
     (Country 
     ,Year 
     ,SalesAmount 
     ) 
VALUES (N'United States' 
     ,2006 
     ,2126696.5460 
     ) 
INSERT dbo.PivotExample 
     (Country, Year, SalesAmount) 
VALUES (N'France', 2006, 514942.0131) 
GO 

SELECT * 
FROM dbo.PivotExample 
ORDER BY Country 
GO 

SELECT Country 
,  [2005] 
,  [2006] 
,  [2007] 
,  [2008] 
,  [2009] 
,  [2010] 
FROM dbo.PivotExample PIVOT 
(SUM(SalesAmount) FOR Year IN ([2005], [2006], [2007], [2008], [2009], [2010])) P 

--Declare necessary variables 
DECLARE @SQLQuery AS NVARCHAR(MAX) 
DECLARE @PivotColumns AS NVARCHAR(MAX) 

--Get unique values of pivot column 
SELECT @PivotColumns= COALESCE(@PivotColumns + ',','') + QUOTENAME(Year) 
FROM (SELECT DISTINCT Year FROM [dbo].[PivotExample]) AS PivotExample 

SELECT @PivotColumns 

--Create the dynamic query with all the values for 
--pivot column at runtime 
SET @SQLQuery = 
    N'SELECT Country, ' + @PivotColumns + ' 
    FROM [dbo].[PivotExample] 
    PIVOT(SUM(SalesAmount) 
      FOR Year IN (' + @PivotColumns + ')) AS P' 

SELECT @SQLQuery 
--Execute dynamic query 
EXEC sp_executesql @SQLQuery 

ROLLBACK TRAN 

Credit http://www.databasejournal.com

vollständigen Link http://www.databasejournal.com/features/mssql/converting-rows-to-columns-pivot-and-columns-to-rows-unpivot-in-sql-server.html

eine Lese der vollständigen Seite haben, ist es ziemlich gut, und was ich auf Basis meiner Code an.

+0

Das ist sehr nah an dem, was ich suche, werde definitiv eine gute Studie über diesen Link haben, danke! – JustLukas

Verwandte Themen