2016-08-08 55 views
0

Ich kann keine Werte mithilfe der Abfrage einfügen. Daten werden korrekt abgerufen und erstellt. Ich habe nur Probleme mit der "in Tabelle einfügen"In Tabelle einfügen mit Abfragen zum Abrufen einiger Werte aus anderen Tabellen

Ich erhalte Daten aus einer Reihe von Funktionen und Joins und versuchen, das Ergebnis in die Tabelle Temp_ParentG_Sales_Total einzufügen.

Während die Daten korrekt abgerufen werden, ist die Einfügung in Teil, was ich habe Probleme mit. Es folgt die Abfrage Ich verwende:

insert into MDM_STAT.dbo.Temp_ParentG_Sales_Totals (PARENT_DESCRIPTION, Total_Sales, Ranking) 
select ABALPH, TOTAL, RANKING 
from( --- the query from this part to the bottom is working correctly. 

USE MDM_STAT 
DECLARE @RUNMONTH INT; 
DECLARE @RUNYEAR INT; 
DECLARE @PERIOD INT; 
DECLARE @FISCALRUNYEAR INT; 
DECLARE @FISCALRUNYEAR_BEGIN INT; 
DECLARE @RANKING_TYPE VARCHAR(100); 
DECLARE @RANKING_USE VARCHAR(100); 
DECLARE @AUPPER DECIMAL(12,2); 
DECLARE @ALOWER DECIMAL(12,2); 
DECLARE @BUPPER DECIMAL(12,2); 
DECLARE @BLOWER DECIMAL(12,2); 
DECLARE @CUPPER DECIMAL(12,2); 
DECLARE @CLOWER DECIMAL(12,2); 
DECLARE @DUPPER DECIMAL(12,2); 
DECLARE @DLOWER DECIMAL(12,2); 
SET @RANKING_TYPE = 'CUSTOMER SALES'; 
SET @RANKING_USE='CUSTOMER SALES RANKING 8_4_2016'; 
SET @ALOWER =(SELECT LOWER_LIMIT FROM dbo.XREF_ABC_RANKING_RULES WHERE RANKS='A'AND RANKING_TYPE= @RANKING_TYPE AND RANKING_USE = @RANKING_USE); 
SET @BUPPER =(SELECT UPPER_LIMIT FROM dbo.XREF_ABC_RANKING_RULES WHERE RANKS='B'AND RANKING_TYPE= @RANKING_TYPE AND RANKING_USE = @RANKING_USE); 
SET @BLOWER =(SELECT LOWER_LIMIT FROM dbo.XREF_ABC_RANKING_RULES WHERE RANKS='B'AND RANKING_TYPE= @RANKING_TYPE AND RANKING_USE = @RANKING_USE); 
SET @CUPPER =(SELECT UPPER_LIMIT FROM dbo.XREF_ABC_RANKING_RULES WHERE RANKS='C'AND RANKING_TYPE= @RANKING_TYPE AND RANKING_USE = @RANKING_USE); 
SET @CLOWER =(SELECT LOWER_LIMIT FROM dbo.XREF_ABC_RANKING_RULES WHERE RANKS='C'AND RANKING_TYPE= @RANKING_TYPE AND RANKING_USE = @RANKING_USE); 
SET @DUPPER =(SELECT UPPER_LIMIT FROM dbo.XREF_ABC_RANKING_RULES WHERE RANKS='D'AND RANKING_TYPE= @RANKING_TYPE AND RANKING_USE = @RANKING_USE); 
SET @RUNMONTH=MONTH(GETDATE()); 
SET @RUNYEAR=YEAR(GETDATE()); 
SET @PERIOD= 
     CASE 
     WHEN @RUNMONTH>3 THEN (@RUNMONTH-3) 
     ELSE [email protected] 
    END 
    ; 
SET @FISCALRUNYEAR= 
     CASE 
     WHEN @RUNMONTH>3 THEN @RUNYEAR 
     ELSE @RUNYEAR-1 
     END 
     ; 
SET @FISCALRUNYEAR_BEGIN= 
     CASE 
     WHEN @PERIOD=12 THEN @FISCALRUNYEAR 
     ELSE @FISCALRUNYEAR-1 
     END 
     ; 

SELECT F.ABALPH,F.TOTAL, RANKING= 
CASE 
WHEN F.TOTAL >@ALOWER THEN 'A' 
WHEN F.TOTAL >@BLOWER AND F.TOTAL<[email protected] THEN 'B' 
WHEN F.TOTAL >@CLOWER AND F.TOTAL<[email protected] THEN 'C' 
ELSE 'D' 
END 
FROM 
(
select AB.ABALPH, C.Total from JDE_TEST.TESTDTA.F0101 AB 
right join 
(
select Sum(B.TOTAL) as Total,G.MAPA8 from JDE_TEST.TESTDTA.F0150 G 
left join 
(
--DETERMINING 12 MONTHS SALE PER CUSTOMER 
SELECT A.CUSTOMER, SUM(A.SALES) AS TOTAL FROM 
(
SELECT S.CUSTOMER, S.SALESYEAR, S.SALES, S.PERIOD FROM 
(
SELECT DISTINCT CUSTOMER,SALESYEAR,SUM(CAST(Dollar01 AS DECIMAL(11,2))) AS SALES, '1' AS PERIOD 
FROM sds.SMarginText GROUP BY CUSTOMER,SALESYEAR 
UNION 
SELECT DISTINCT CUSTOMER,SALESYEAR,SUM(CAST(Dollar02 AS DECIMAL(11,2))) AS SALES, '2' AS PERIOD 
FROM sds.SMarginText GROUP BY CUSTOMER,SALESYEAR 
) AS S 
WHERE [email protected] 
AND S.PERIOD<[email protected] 
UNION 
SELECT T.CUSTOMER, T.SALESYEAR, T.SALES, T.PERIOD FROM 
(
SELECT DISTINCT CUSTOMER,SALESYEAR,SUM(CAST(Dollar01 AS DECIMAL(11,2))) AS SALES, '1' AS PERIOD 
FROM sds.SMarginText GROUP BY CUSTOMER,SALESYEAR 
UNION 
SELECT DISTINCT CUSTOMER,SALESYEAR,SUM(CAST(Dollar02 AS DECIMAL(11,2))) AS SALES, '2' AS PERIOD 
FROM sds.SMarginText GROUP BY CUSTOMER,SALESYEAR 
) AS T 
WHERE [email protected]_BEGIN 
AND T.PERIOD>@PERIOD 
) 
AS A 
GROUP BY A.CUSTOMER 
) AS B 
on cast(B.Customer as int) = G.MAAN8 
where B.Customer <> 'Unspec' 
Group By G.MAPA8 
) As C 
on C.MAPA8 = AB.ABAN8 
) AS F 
order by F.Total ASC) 
+0

Erhalten Sie einen Fehler? Oder die falschen Ergebnisse? Oder ? –

+2

Ich verstehe nicht, warum Sie 'INSERT' oben auf ein Skript schreiben müssen; Warum kannst du 'INSERT' nicht direkt über deiner 'SELECT'-Anweisung schreiben? – techspider

+0

Sie müssen hier viel mehr Details veröffentlichen. Wie gepostet, ist es nur eine Textwand ohne Erklärung, was nicht richtig funktioniert und keine Hinweise darauf, was Sie tun möchten. Hier ist ein guter Anfang. http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

Antwort

2

Dies geschieht, weil Sie versuchen, ein Skript in Ihrem INSERT Anweisung einzuschließen.

Sie müssen Ihre INSERT Anweisung direkt an der Spitze SELECT Anweisung hinzufügen, die Ihre erforderlichen Spalten zum Einfügen in Ihre Tabelle gibt.

Ich denke, unten ist Ihre Top-Abfrage.