2017-12-18 7 views
-4

Ich habe die SLQ unten, um ein Datum auszuwählen, aber ich möchte zwei Daten nebeneinander sehen. Wie kann ich das machen?Wie zwei Daten nebeneinander angezeigt werden?

Delete From Variance_Analysis 

INSERT INTO Variance_Analysis 
SELECT PIDs.Product_Group, 
     PIDs.PID, 
     PIDs.PID_Name, 
     SUM(MaturityValue) Current_Balance, 
     AsOfDate as Current_Date 
FROM [TBL_PIDs] AS PIDs INNER JOIN RAW_DATA_HIST AS RawData 
    ON PIDs.PID = RawData.PID 
Where AsOfDate = '2017-10-31' 
GROUP BY Product_Group, 
     PIDs.PID, 
     PIDs.PID_Name, 
     AsOfDate 

Wie Sie sehen können, lösche ich die Tabelle, und dann einige IDs und ein Datum einfügen (während Kontosalden Summieren). Ich brauche ein anderes Datum und summiere die entsprechenden Salden. Dann möchte ich die absolute Differenz und die relative Differenz finden, aufgeteilt in 3 Felder. Ich bin mit SQL Server 2008.

-- Step1: 
CREATE TABLE test_table (
    Product_Group varchar(255), 
    PID varchar(10), 
    PID_Name varchar(255), 
    maturityValue decimal(18,2), 
    AsofDate date, 
    Portfolio varchar(255) 
); 


-- Step2: 
INSERT INTO test_table (Product_Group,PID,PID_Name,maturityValue,AsofDate,Portfolio) 
VALUES ('Invt','I.B.7','Investments',1258.69,'9/29/2017','Holding') 
INSERT INTO test_table (Product_Group,PID,PID_Name,maturityValue,AsofDate,Portfolio) 
VALUES ('Asse','A.Q.7','Assets',1263.28,'9/29/2017','Holding') 
INSERT INTO test_table (Product_Group,PID,PID_Name,maturityValue,AsofDate,Portfolio) 
VALUES ('Forx','X.S.7','Foreign_Exchange',1267.89,'9/29/2017','Holding') 
INSERT INTO test_table (Product_Group,PID,PID_Name,maturityValue,AsofDate,Portfolio) 
VALUES ('Forx','X.S.7','Foreign_Exchange',1272.51,'9/29/2017','Holding') 
INSERT INTO test_table (Product_Group,PID,PID_Name,maturityValue,AsofDate,Portfolio) 
VALUES ('Forx','X.S.7','Foreign_Exchange',1277.15,'9/29/2017','Holding') 
INSERT INTO test_table (Product_Group,PID,PID_Name,maturityValue,AsofDate,Portfolio) 
VALUES ('Govt','G.G.7','Government',1281.81,'9/29/2017','Passing') 
INSERT INTO test_table (Product_Group,PID,PID_Name,maturityValue,AsofDate,Portfolio) 
VALUES ('Govt','G.G.7','Government',1286.48,'9/29/2017','Passing') 
INSERT INTO test_table (Product_Group,PID,PID_Name,maturityValue,AsofDate,Portfolio) 
VALUES ('Invt','I.S.7','Investments',1359.3852,'10/31/2017','Passing') 
INSERT INTO test_table (Product_Group,PID,PID_Name,maturityValue,AsofDate,Portfolio) 
VALUES ('Asse','I.S.7','Assets',1364.3424,'10/31/2017','Holding') 
INSERT INTO test_table (Product_Group,PID,PID_Name,maturityValue,AsofDate,Portfolio) 
VALUES ('Forx','I.S.7','Foreign_Exchange',1331.2845,'10/31/2017','Holding') 
INSERT INTO test_table (Product_Group,PID,PID_Name,maturityValue,AsofDate,Portfolio) 
VALUES ('Forx','I.S.7','Foreign_Exchange',1336.1355,'10/31/2017','Holding') 
INSERT INTO test_table (Product_Group,PID,PID_Name,maturityValue,AsofDate,Portfolio) 
VALUES ('Forx','I.S.7','Foreign_Exchange',1341.0075,'10/31/2017','Holding') 
INSERT INTO test_table (Product_Group,PID,PID_Name,maturityValue,AsofDate,Portfolio) 
VALUES ('Govt','I.S.7','Government',1435.6272,'10/31/2017','Holding') 
INSERT INTO test_table (Product_Group,PID,PID_Name,maturityValue,AsofDate,Portfolio) 
VALUES ('Govt','I.S.7','Government',1518.0464,'10/31/2017','Passing') 

Bevor:

Product_Group PID PID_Name maturityValue AsofDate Portfolio 
Invt I.B.7 Investments 1258.69 9/29/2017 Holding 
Asst A.Q.7 Assets 1263.28 9/29/2017 Holding 
Forx X.S.7 Foreign_Exchange 1267.89 9/29/2017 Holding 
Forx X.S.7 Foreign_Exchange 1272.51 9/29/2017 Holding 
Forx X.S.7 Foreign_Exchange 1277.15 9/29/2017 Holding 
Govt G.G.7 Government 1281.81 9/29/2017 Passing 
Govt G.G.7 Government 1286.48 9/29/2017 Passing 
Invt I.B.7 Investments 1359.3852 10/31/2017 Passing 
Asst A.Q.7 Assets 1364.3424 10/31/2017 Holding 
Forx X.S.7 Foreign_Exchange 1331.2845 10/31/2017 Holding 
Forx X.S.7 Foreign_Exchange 1336.1355 10/31/2017 Holding 
Forx X.S.7 Foreign_Exchange 1341.0075 10/31/2017 Holding 
Govt G.G.7 Government 1435.6272 10/31/2017 Holding 
Govt G.G.7 Government 1518.0464 10/31/2017 Passing 

Nach:

enter image description here

+2

Bilder sind nicht hilfreich für T-SQL-Fragen (besonders wenn sie nur Spaltenüberschriften und keine Daten enthalten). Stattdessen können Sie Ihre DDL- und Beispieldaten zusammen mit der erwarteten Ausgabe, die Sie erreichen möchten, posten. Bei einer Schätzung werden Sie wahrscheinlich ein 'CTE' und' ROW_NUMBER() 'verwenden müssen. Dann 'LEFT JOIN' eine Zeile auf die nächste/vorherige, basierend auf dem Wert Ihrer Zeilennummerierung. Wenn Sie SQL Server 2012+ verwenden, können Sie 'LEAD' /' LAG' verwenden. – Larnu

+1

Sie müssen mit einigen Details beginnen. http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

Antwort

0

Dies funktioniert für mich.

Delete From Variance_Analysis 

INSERT INTO Variance_Analysis 
SELECT PIDs.Product_Group, 
     PIDs.PID, 
     PIDs.PID_Name, 
     SUM(CASE WHEN AsOfDate = '2017-10-31' THEN MaturityValue ELSE 0 END) AS Current_Balance, 
     SUM(CASE WHEN AsOfDate = '2017-09-29' THEN MaturityValue ELSE 0 END) AS Prior_Balance 
FROM [TBL_PIDs] AS PIDs INNER JOIN TBL_FR2052A_RAW_DATA_HIST AS RawData 
    ON PIDs.PID = RawData.PID 
GROUP BY PIDs.Product_Group, 
     PIDs.PID, 
     PIDs.PID_Name 
Verwandte Themen