2012-03-22 9 views
2

위의 오류가 나타나는 최종 쿼리를 실행할 때. 내 테이블 형식을 올바르게 설정 한 경우 내 @ProdTotal 쿼리를 별도로 실행하면 올바른 데이터를 얻고 을 가져 오지 않고 최종 @Sales_Prod 쿼리를 실행하는 경우와 동일한 결과가 나타납니다.문자열에서 유니크 식별자로 변환 할 때 변환하지 못했습니다.

오류는 특히 Line 99을 가리키며, 여기에서 INSERT INTO @Production이 시작됩니다. pt.Production_VolumeDECIMAL(18,6)으로 설정된 경우 오류가 발생하는 이유는 무엇입니까? 내가 CASE 성명을 사용하고 있기 때문에 그런가요?

여기에 내 모든 쿼리입니다 :

DECLARE @BeginningDate datetime 
DECLARE @EndingDate  datetime 

SET @BeginningDate = '03-01-2012' 
SET @EndingDate  = '03-20-2012' 

DECLARE @Proc  TABLE 
(
Process_Number  UNIQUEIDENTIFIER 
,Process_Name  NVARCHAR(50) 
) 

Insert into @Proc 
(
Process_Number  
,Process_Name 
) 
(
(Select '60203D01-FEAA-4F4B-BFC8-F6C6BD7D9977','Alex.I-Line') 
Union (Select '4F980EDF-9EE4-41A1-9DBD-BE12FE227199', 'Alex.Versa Lam') 
Union (Select 'B7AB6C1E-2897-4C3F-A6C4-B53E996288ED', 'WCEWP.I-Line') 
Union (Select '44A7E9C7-FEE7-4DEA-8826-D10CCCF5FA0F', 'WCEWP.Versa Lam') 
Union (Select '079632C7-ADD7-47AF-89AB-B28CDDBA2AD5','StJ.I-Line') 
) 

--Select * from @Prod 
DECLARE @Plant  TABLE 
(
Department_Number UNIQUEIDENTIFIER 
,Process_Number  UNIQUEIDENTIFIER 
,Process_Name  NVARCHAR(50) 
,Plant_Number  UNIQUEIDENTIFIER 
,Plant_Name   NVARCHAR(50) 
) 

INSERT INTO @Plant 
(
Department_Number 
,Process_Number 
,Process_Name 
,Plant_Number 
,Plant_Name 
) 
(
SELECT 

d.department_number 
,pr.process_number 
,pr.Process_name 
, p.plant_number 
, p.plant_name 

FROM trueopportunity.dbo.Process pr 
inner join trueopportunity.dbo.department d 
on pr.department_number = d.department_number 

inner join @Proc pro 
on pr.process_number = pro.process_number 

inner join trueopportunity.dbo.plant p 
on d.plant_number = p.plant_number 
) 

--SELECT * FROM @Plant 

Declare @Product_Name Table 
(
Product_Group_Number uniqueidentifier 
,Product_Name   nvarchar(50) 
) 

INSERT INTO @Product_Name 
(
Product_Group_Number 
,Product_Name 
) 
(
(SELECT 'FE1EC4A8-FEC4-4F45-B74F-72528967DB4B', 'I-Joists ') 
UNION(SELECT '0A32AA2B-2630-4090-ADA1-33FAD888FA27', 'Rimboard') 
UNION(SELECT '38B67F82-9259-417D-83AF-493CBF953FD1','Versa Lam') 
) 

--SELECT * FROM @Product_Name 

DECLARE @Production  TABLE 

(
Production_Process_Number  uniqueidentifier 
,Production_Number    uniqueidentifier 
,Process_Number     uniqueidentifier 
,Process_Name     nvarchar(50) 
,Plant_Name      nvarchar(50) 
,Plant_Number     uniqueidentifier 
,Production_Volume    decimal(18,6) 
,Production_Date    datetime 
,Product_Group_Name    nvarchar(50) 
) 

INSERT INTO @Production 
(
Production_Process_Number 
,Production_Number 
,Process_Number 
,Process_Name 
,Plant_Number 
,Plant_Name 
,Production_Volume 
,Production_Date 
,Product_Group_Name 
) 
(SELECT 

ppf.Production_Process_Number 
,ppf.Production_Number 
,pl.process_number 
,pl.Process_Name 
,pl.plant_name 
,Plant_Number 
,CASE 
WHEN (pg.Product_Group_Name) = 'I-Joist' THEN (sum(ppf.Good_Output)) 
ELSE (sum(ppf.Good_Output_Product_Units)) 
END as 'Prod Vol' 
, pf.date 
, pg.product_group_name 

FROM 
trueopportunity.dbo.Production_Fact pf 
Inner Join trueopportunity.dbo.Production_Process_Fact ppf 
on pf.production_number = ppf.production_number 

inner join @Plant pl 
on pf.process_number = pl.process_number 

inner join trueopportunity.dbo.Product prd 
on pf.product_number = prd.product_number 

inner join trueopportunity.dbo.Product_Group pg 
on pg.product_group_number = prd.product_group_number 

inner join @Product_Name pn 
on pn.product_group_number = prd.product_group_number 

and 
pf.date between @BeginningDate and @EndingDate 

GROUP BY 
Plant_Number 
,pl.plant_name 
,pg.product_group_name 
,prd.product_name 
,pl.Process_Name 
,pl.process_number 
,ppf.Production_Process_Number 
,ppf.Production_Number 
,pf.date 
) 

ORDER BY 
pf.date 

--SELECT * FROM @Production 

DECLARE @ProdTotal  TABLE 
(
Plant_Number   UNIQUEIDENTIFIER 
,Plant_Name    NVARCHAR(50) 
,Production_Volume  DECIMAL(18,6) 
,Product_Group_Name  NVARCHAR(50) 
) 
Insert into @ProdTotal 
(
Plant_Number  
,Plant_name 
,Production_Volume 
,Product_Group_Name 
) 
(SELECT 
p.plant_number 
,p.plant_name 
,sum(p.production_volume) 
,p.product_group_name 

FROM @Production p 

WHERE Production_date between @BeginningDate and @EndingDate 

GROUP BY 
p.plant_number 
,p.plant_name 
,p.product_group_name 

) 
order by p.plant_name 

--select * from @ProdTotal 

DECLARE @EWPSales  TABLE 
(
Plant_Number   UNIQUEIDENTIFIER 
,Plant_Code    NVARCHAR(100) 
,Process_Number   UNIQUEIDENTIFIER 
,Product_Group_Code  NVARCHAR(100) 
,Actual_Volume   DECIMAL(18,6) 
,Actual_Sales_Dollars DECIMAL(18,6) 
,Avg_Price    DECIMAL(18,6) 
,Production_Date  DATETIME 
) 

INSERT INTO @EWPSales 
(
Plant_Number 
,Plant_Code 
,Process_Number 
,Product_Group_Code 
,Actual_Volume 
,Actual_Sales_Dollars 
,Avg_Price 
,Production_Date 
) 

(
SELECT 
esl.Plant_Number 
,esl.Plant_Code 
,esl.Process_Number 
,esl.Product_Group_Code 
,(esl.Actual_Volume) 
,esl.Actual_Sales_Dollars 
,CASE      
    WHEN coalesce (esl.Actual_Volume,0) = 0 and 
     coalesce (esl.Actual_Sales_Dollars,0) = 0 
     THEN 0 
     ELSE (sum(esl.Actual_Sales_Dollars)/sum(esl.Actual_Volume))  
    END AS 'AVG PRICE' 
,esl.Production_Date 

FROM 
WOODPRODUCTION.DBO.EWP_Sales esl 


Where esl.Production_Date between @BeginningDate and @EndingDate 


GROUP BY 
esl.Plant_Number 
,esl.Plant_Code 
,esl.Process_Number 
,esl.Product_Group_Code 
,esl.Actual_Volume 
,esl.Actual_Sales_Dollars 
,esl.Production_Date 
) 
ORDER BY 
esl.Production_Date 

--Select * from @EWPSales 

Declare @Sales_Total  TABLE 
(Plant_Number   UNIQUEIDENTIFIER 
,Plant_name    NVARCHAR (50) 
,Product_Group_Code  NVARCHAR(100) 
,Actual_Volume   DECIMAL(18,6) 
,Actual_Sales_Dollars DECIMAL(18,6) 
,Avg_Price    DECIMAL(18,6) 
,sales_date    DATETIME 
) 

Insert into @Sales_Total 
(Plant_Number 
,Plant_name 
,Product_Group_Code  
,Actual_Volume 
,Actual_Sales_Dollars 
,Avg_Price 
,Sales_Date) 

(
SELECT 
s.Plant_Number 
,s.Plant_Code 
,s.Product_Group_Code  
,(s.Actual_Volume) 
,(s.Actual_Sales_Dollars) 
,CASE      
WHEN coalesce (sum(s.Actual_Volume),0) = 0 
THEN 0 
ELSE (sum(s.Actual_Sales_Dollars)/sum(s.Actual_Volume))  
END  
,s.production_Date 


FROM @EWPSales s 
WHERE s.production_date between @BeginningDate and @EndingDate 

GROUP BY 
s.plant_number 
,s.plant_code 
,s.Product_Group_Code 
,(s.Actual_Volume) 
,s.production_date 
,s.Actual_Sales_Dollars 
,s.avg_price 
) 

ORDER BY s.production_date 
--Select * from @Sales_Total 

Declare @Sales_Prod   TABLE 
(
Plant_Number    UNIQUEIDENTIFIER 
,Plant_Name     NVARCHAR (50) 
,Product_Group_Code   NVARCHAR(100) 
,Actual_Volume    DECIMAL(18,6) 
,Actual_Sales_Dollars  DECIMAL(18,6) 
,Average_Price    DECIMAL(18,6) 
,Production_Volume   DECIMAL(18,6) 
,Sales_Date     DATETIME 
) 

INSERT INTO @Sales_Prod 
(
Plant_Number 
,Plant_name 
,Product_Group_Code 
,Actual_Volume 
,Actual_Sales_Dollars 
,Average_Price 
,Production_Volume 
,Sales_Date 
) 

(
SELECT 
st.Plant_Number 
,st.Plant_name 
,st.Product_Group_Code 
,st.Actual_Volume 
,st.Actual_Sales_Dollars 
,st.Avg_Price 
,pt.Production_Volume 
,st.Sales_Date 


FROM @Sales_Total st 
inner join @EWPSales s 
on st.plant_number = s.plant_number 

inner join @ProdTotal pt 
on pt.plant_number = st.plant_number 

and st.sales_date between @BeginningDate and @EndingDate 

GROUP BY 
st.Plant_Number 
,st.Plant_name 
,st.Product_Group_Code 
,st.Actual_Volume 
,st.Actual_Sales_Dollars 
,st.Avg_Price 
,pt.Production_Volume 
,st.Sales_Date 

) 
Order by st.Plant_name, st.sales_date 
Select * from @Sales_Prod 

TL; DR : 내 INSERT INTO @Production 라인에서 시작하여 위의 오류를 받고 있어요 내가 왜 모르겠어요.

미리 감사드립니다.

+0

내 컴퓨터에서 제대로 작동합니다. –

+0

@AndreyGurinov -이 쿼리를 어떻게 실행 했습니까? 그것은 우리가 갖고 있지 않은 특정 테이블을 가리 킵니다 (적어도 추측입니다) . AaronSmith - 아마도 uniqueidentifier 인 varchar 필드에 가입하고 있습니다. 테이블 구조를 보여줄 수 있습니까? – Lamak

+0

스크롤바를 보지 않고 쿼리의 윗부분 만 실행했습니다. 내 나쁜 –

답변

3

Plant_Number는 선언에 따른 고유 식별자입니다. 그러나 pl.plant_name을 plant_Number로 삽입하려고합니다. SELECT 문에있는 열의 순서가 잘못되었습니다.

+0

+1 - 좋은 캐치! – Lamak

+0

당신은 친절한 사람입니다, 훌륭합니다! 고마워요! –

관련 문제