2013-08-13 2 views
0

이전에 정의한 두 열의 값을 함께 추가하려고합니다. 쿼리 내에서이 작업을 수행 할 수있는 방법이 있는지 궁금합니다. 다음은 사용자 지정 명명 된 열 계산

내 코드와 나는 명명 된 열 SP 및 IP의 함께 값을 추가하려고 :

DECLARE @Flag nvarchar(10), 
      @Month int, 
      @Year int, 
      @ViewName as nvarchar(50), 
      @PrePlumb as int 

SET @Flag = 'Grid' 
SET @Month = 01 
SET @Year = 2013 
SET @ViewName = 'Delivered' 

SELECT  PID, 
      [Customer Name], 
      [Project Name], 
      Delivered1, 
      CAST(SUM(Production) AS decimal(10, 2)) AS Value, 
      CAST(SUM(SellingPrice) AS decimal(10, 2)) AS SP, 
      CAST(SUM(IP) AS decimal(10, 2)) AS IP, 
      CAST(SUM(Plumb) AS Decimal(10, 2)) As Plumb 
FROM  (
       SELECT  SpecificationHeader.Qno, 
          SpecificationHeader.PID, 
          Customers3.[Customer Name], 
          Projects2.[Project Name], 
          MAX(SpecDetailsExt.Delivered) AS Delivered1, 
          MAX(SpecDetails.SellingPrice) AS SellingPrice, 
          MAX(SpecDetails.FactoryRate) AS Production, 
          (CASE 
           WHEN MAX(SpecificationHeader.[Installation Costs]) = 'Yes' 
           THEN MAX(specdetails.InstallationCostPlusMargin) ELSE 0 
          END) AS IP, 
          (CASE 
           WHEN MAX(SpecificationHeader.[Plumbing Costs]) = 'Yes' 
           THEN MAX(specdetails.PlumbCostPlusMargin) ELSE 0 
          END) AS Plumb, 
          MAX(CONVERT(date, SpecDetailsExt.Delivered, 3)) AS Delivered 
     FROM  SpecDetailsExt 
          INNER JOIN SpecDetails 
           ON SpecDetailsExt.SrecId = SpecDetails.SrecId 
          INNER JOIN SpecificationHeader 
           ON SpecDetails.QuoteNo = SpecificationHeader.Qno 
          INNER JOIN Projects2 
           ON SpecificationHeader.PID = Projects2.PID 
          INNER JOIN Customers3 
           ON Projects2.[Customer Number] = Customers3.[Customer Number] 
     WHERE  (SpecificationHeader.MoveToOrder <> '') 
          AND (SpecDetailsExt.Delivered <> N'') 
          AND (DATEPART(MONTH, CONVERT(date, SpecDetailsExt.Delivered , 3)) = @Month) 
          AND (YEAR(CONVERT(date, SpecDetailsExt.Delivered , 3)) = @Year) 
       GROUP BY SpecificationHeader.Qno, 
          Customers3.[Customer Name], 
          Projects2.[Project Name], 
          SpecificationHeader.PID, 
          SpecDetailsExt.SrecId 
    ) AS x 
    GROUP BY PID, 
      [Customer Name], 
      [Project Name], 
      Delivered1 
    ORDER BY Delivered1 desc, 
      [Customer Name], 
      [Project Name] 

답변

0

사용하십시오 CTE :

DECLARE @Flag nvarchar(10), 
      @Month int, 
      @Year int, 
      @ViewName as nvarchar(50), 
      @PrePlumb as int 

SET @Flag = 'Grid' 
SET @Month = 01 
SET @Year = 2013 
SET @ViewName = 'Delivered' 

;WITH MyCTE AS 
(
SELECT  PID, 
      [Customer Name], 
      [Project Name], 
      Delivered1, 
      CAST(SUM(Production) AS decimal(10, 2)) AS Value, 
      CAST(SUM(SellingPrice) AS decimal(10, 2)) AS SP, 
      CAST(SUM(IP) AS decimal(10, 2)) AS IP, 
      CAST(SUM(Plumb) AS Decimal(10, 2)) As Plumb 
FROM  (
       SELECT  SpecificationHeader.Qno, 
          SpecificationHeader.PID, 
          Customers3.[Customer Name], 
          Projects2.[Project Name], 
          MAX(SpecDetailsExt.Delivered) AS Delivered1, 
          MAX(SpecDetails.SellingPrice) AS SellingPrice, 
          MAX(SpecDetails.FactoryRate) AS Production, 
          (CASE 
           WHEN MAX(SpecificationHeader.[Installation Costs]) = 'Yes' 
           THEN MAX(specdetails.InstallationCostPlusMargin) ELSE 0 
          END) AS IP, 
          (CASE 
           WHEN MAX(SpecificationHeader.[Plumbing Costs]) = 'Yes' 
           THEN MAX(specdetails.PlumbCostPlusMargin) ELSE 0 
          END) AS Plumb, 
          MAX(CONVERT(date, SpecDetailsExt.Delivered, 3)) AS Delivered 
     FROM  SpecDetailsExt 
          INNER JOIN SpecDetails 
           ON SpecDetailsExt.SrecId = SpecDetails.SrecId 
          INNER JOIN SpecificationHeader 
           ON SpecDetails.QuoteNo = SpecificationHeader.Qno 
          INNER JOIN Projects2 
           ON SpecificationHeader.PID = Projects2.PID 
          INNER JOIN Customers3 
           ON Projects2.[Customer Number] = Customers3.[Customer Number] 
     WHERE  (SpecificationHeader.MoveToOrder <> '') 
          AND (SpecDetailsExt.Delivered <> N'') 
          AND (DATEPART(MONTH, CONVERT(date, SpecDetailsExt.Delivered , 3)) = @Month) 
          AND (YEAR(CONVERT(date, SpecDetailsExt.Delivered , 3)) = @Year) 
       GROUP BY SpecificationHeader.Qno, 
          Customers3.[Customer Name], 
          Projects2.[Project Name], 
          SpecificationHeader.PID, 
          SpecDetailsExt.SrecId 
    ) AS x 
    GROUP BY PID, 
      [Customer Name], 
      [Project Name], 
      Delivered1 
    ORDER BY Delivered1 desc, 
      [Customer Name], 
      [Project Name] 
) 

SELECT  PID, 
      [Customer Name], 
      [Project Name], 
      Delivered1, 
      Value, 
      SP, 
      IP, 
      Plumb, 
      SP + IP AS Combined 
FROM  MyCTE 
관련 문제