2015-02-03 5 views
2

나는 테이블을 만들고 아래 결과에 쿼리가 있습니다산술 연산자는 2008

-- tblPart PartCode[NVARCHAR(50)],UnitPrice[Decimal(18,2)] 
SELECT * INTO #tblPart FROM(
SELECT 'A' PartCode, '10' UnitPrice 
UNION All 
SELECT 'B','11' 
UNION All 
SELECT 'C','38' 
UNION All 
SELECT 'D','20' 
UNION All 
SELECT 'E','12')part; 

-- tblPartCondition ConditionCode[NVARCHAR(50)],PercentagePrice[Decimal(18,2)] 
SELECT * INTO #tblPriceCondition FROM(
SELECT 'Weekly' ConditionCode, '3' PercentagePrice 
UNION All 
SELECT 'Urgent','-5' 
UNION All 
SELECT 'Hotline','-10' 
UNION All 
SELECT 'Normal','0')pricecondition 


SELECT PartCode, 
     [Weekly]=p.UnitPrice + (SELECT (CAST(c.PercentagePrice AS DECIMAL(18,2))/100) FROM #tblPriceCondition c WHERE c.ConditionCode='Weekly'), 
     [Urgent]=p.UnitPrice + (SELECT (CAST(c.PercentagePrice AS DECIMAL(18,2))/100) FROM #tblPriceCondition c WHERE c.ConditionCode='Urgent'), 
     [Hotline]=p.UnitPrice + (SELECT (CAST(c.PercentagePrice AS DECIMAL(18,2))/100) FROM #tblPriceCondition c WHERE c.ConditionCode='Hotline'), 
     [Normal]=p.UnitPrice + (SELECT (CAST(c.PercentagePrice AS DECIMAL(18,2))/100) FROM #tblPriceCondition c WHERE c.ConditionCode='Normal') 
FROM #tblPart p 

DROP TABLE #tblPart 
DROP TABLE #tblPriceCondition 

을 아래에 결과를 얻었다 :

PartCode Weekly Urgent Hotline Normal 
........ ...... ...... ....... ...... 
    A   10.03  9.95  9.9  10 
    B   11.03 10.95 10.9  11 
    C   38.03 37.95 37.9  38 
    D   20.03 19.95 19.9  20 
    E   12.03 11.95 11.9  12 

위 알려진 열을 기반으로 쿼리 #tblPartCondition, Pls. 기둥이 알려지지 않았다면 어떤 생각입니까? (사용자가 새 PercentageCode, PercentagePrice를 추가하는 경우). 나는 당신의 가치 시간과 몫에 감사 할 것입니다. 감사!

+0

이 경우 사람들은 일반적으로'tblPriceCondition' 테이블의 실제 값을 기반으로 동적으로'PIVOT' 쿼리를 작성하도록 제안합니다. –

+0

감사합니다 @ Vladimir Baranov, 그러나 나는 PIVOT 쿼리에 대해 잘 모릅니다. 코드를 제공 할 수 있습니까? – Sokea

+1

https://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx http : //stackoverflow.com/questions/12074939/get-rows-as-columns-sql-server-dynamic-pivot-query http://stackoverflow.com/questions/19243821/pivot-transformation-using-t-sql 당신에게 좋은 시작 지점을 준다 –

답변

1

것은 뭐에 회신 해 주시기 바랍니다

DECLARE @cols NVARCHAR (MAX) 

SELECT @cols = COALESCE (@cols + ',[' + ConditionCode + ']', '[' + ConditionCode + ']') 
       FROM (SELECT DISTINCT ConditionCode FROM #tblPriceCondition) PV 
       ORDER BY ConditionCode 

사용 CROSS JOIN 볼 수있는 각 PartCode

DECLARE @query NVARCHAR(MAX) 
SET @query = 'SELECT PartCode,' + @cols + ' FROM 
      (     
       SELECT PARTCODE,ConditionCode, 
       CAST(UnitPrice + CAST(PercentagePrice AS DECIMAL(18,2))/100 AS DECIMAL(18,2)) VALUE 
       FROM #tblPart 
       CROSS JOIN #tblPriceCondition 
      ) x 
      PIVOT 
      (
       MIN(VALUE) 
       FOR ConditionCode IN (' + @cols + ') 
      ) p 
      ' 

EXEC SP_EXECUTESQL @query 
  • Click here에 대한 ConditionCodePercentagePrice를 얻을 수

결과 피벗에 대한 열 받기 음수 값으로 할 수 없다.
업데이트됩니다.

+0

결과는 음수 값을 포함해야한다. 가격 조건의 수식은 UnitPrice + (PercentagePrice/100)입니다. PercentagePrice는 -10, 5, ... 일 수 있습니다. – Sokea

+0

@Sokea를 업데이트했습니다. –

+0

정말 감사드립니다. 이것은 정말로 도움이됩니다. 정말 고맙습니다. – Sokea