2014-05-16 4 views
-2

좋은 하루들. 현재 ContractQty의 현재 값을 TotalAmountQty으로 뺀 sql 구문을 만듭니다. 아래 코드는 임시 테이블에서 ContractQtyTotalAmountQty을 뺍니다. 내 질문은 ContractQty 값을 내 테이블 소매점으로 업데이트하는 방법입니다. XDeal ColumnName ContractQty 여기서 DocNumber입니다. 임시 테이블에서 데이터를 가져 오는 중입니까? 내 열 ContractQtyRetail.XDeal 감사를 얻고 업데이트 화면 촬영을 필요로하는 값은Sql의 업데이트 값

WITH A AS (SELECT A.DocNumber,SUM(B.Qty) AS TotalAmountQty 
    FROM Retail.XDeal A 
    INNER JOIN Retail.XDealDetail B 
    ON A.DocNumber = B.DocNumber 
    GROUP BY A.DocNumber) 

    SELECT SUM(A.ContractQty-B.TotalAmountQty) as ContractQty FROM Retail.XDeal A 
    INNER JOIN A B 
    ON A.DocNumber = B.DocNumber 

enter image description here

+0

이것은 매우 혼란스러운 질문입니다. 가능한 경우 작성된 ​​영어를 더 잘 부탁 한 사람에게 질문을 검토하고 적절한 편집을 제안하십시오. 이 문장은 특히 이해하기가 매우 어렵습니다. "내 질문은 ContractQty의 값을 내 테이블 Retail.XDeal ColumnName ContractQty로 업데이트하는 방법입니다. 여기서 DocNumber는 임시 테이블에서 데이터를 가져 오는 중입니까?" –

답변

1

나는 당신이 무엇을 하려는지 이해한다고 생각합니다; 이게 작동해야합니다 :

SELECT DocNumber, SUM(Qty) AS TotalAmountQty 
INTO #temp 
FROM Retail.XDealDetail 
GROUP BY DocNumber 

UPDATE Retail.XDeal 
SET ContractQty = A.ContractQty - B.TotalAmountQty 
FROM Retail.XDeal A 
     JOIN #temp B ON A.DocNumber = B.DocNumber; 

DROP TABLE #temp; 
+0

고마워요. –

+0

[Gordon의 답변] (http://stackoverflow.com/a/23692032/173497)은 'cleaner'이며 예제 코드와 유사하기 때문에 노력 해보길 강력히 제안합니다. 어떻게 코드가 작동하는지 이해할 수 있습니다. 내가 한 것처럼 내 대답에 코드를 작성한 이유는 "임시 테이블"을 명시 적으로 언급했기 때문에 예제 코드에 포함되지 않았기 때문입니다. '임시 테이블'(실제로는 실제로 틀리지는 않습니다!) 즉 'WITH ... (...)'부분으로 생각할 수있는 부분을 [공통 테이블 식 (CTE)]이라고합니다 (http://msdn.microsoft.com/en-us/library/ms175972.aspx). –

2

당신은 SQL 서버에 join와 함께 update을 할 수 안부. 이 구문입니다 A에 대한

WITH A AS (
     SELECT xd.DocNumber, SUM(xdd.Qty) AS TotalAmountQty 
     FROM Retail.XDeal xd INNER JOIN 
      Retail.XDealDetail xdd 
      ON xd.DocNumber = xdd.DocNumber 
     GROUP BY xd.DocNumber 
    ) 
UPDATE xd 
    SET ContractQty = A.TotalAmountQty 
    FROM Retail.XDetail xd JOIN 
     A 
     ON xd.DocNumber = A.DocNumber; 

join이 필요하지 않습니다, 그래서 이것은 간단한 버전입니다 : 나는 하위 쿼리 열팽창 계수를 만들 것, 개인적으로

WITH A AS (
     SELECT xdd.DocNumber, SUM(xdd.Qty) AS TotalAmountQty 
     FROM Retail.XDealDetail xdd 
     GROUP BY xdd.DocNumber 
    ) 
UPDATE xd 
    SET ContractQty = A.TotalAmountQty 
    FROM Retail.XDetail xd JOIN 
     A 
     ON xd.DocNumber = A.DocNumber; 

, 그러나 그것은 단지 문제입니다 우선권.

+0

Sir은 두 개의 열을 뺀 코드입니다. 아래 코드는 이미 빼고 임시 열에 저장합니다. ContractQty 값을 가져와 내 테이블로 업데이트해야합니다. –

+0

@Renats. . . 질문은 "ContractQty 값을 내 테이블 Retail.XDeal ColumnName ContractQty로 업데이트하는 방법은 어디입니까? DocNumber. 임시 테이블에서 데이터 가져 오기"를 참조하십시오. 빼기는 어디에서 오는가? 기존 값을 빼고 싶다면'set ContractQty = ContracdtQty - TotalAmountQty'를 사용하면된다. –

+0

알겠습니다. 내가 내 코드를 압축 할 때이 오류가 발생했습니다 'A'는 인식 된 GROUP BY 옵션이 아닙니다 –

1

당신은 SQL 서버의 버전을 언급하지 않지만, 최신 버전은 MERGE를 지원 : 나는 완전히 시나리오를 이해하지 못했다으로

MERGE INTO Retail.XDeal xd2 
USING (
    SELECT xd.DocNumber, SUM(xdd.Qty) AS TotalAmountQty 
    FROM Retail.XDeal xd 
    JOIN Retail.XDealDetail xdd 
     ON xd.DocNumber = xdd.DocNumber 
    GROUP BY xd.DocNumber 
) y 
    ON xd2.DocNumber = y.DocNumber 
WHEN MATCHED THEN 
    UPDATE SET xd2.ContractQty = y.TotalAmountQty 

, 이것은 아마 당신이 원하는 것을 할 수는 없지만 주어야한다 당신이 사용하는 방법에 대한 아이디어 MERGE