계산

2014-01-21 5 views
0

나는 다음과 같은 입력 테이블이 있습니다계산

Article Store Supplier NetPrice Pieces Sum Inventory Price   Cond 
NL1234 N001 3100000 161,5  2  323 7   123,45   2,47 
NL1234 N001 3100000 161,5  0  0  4   103,8   2,08 
NL1234 N001 3100000 161,5  0  0  23   120,8   1,21 

내가 재고 값의 수 가격의 가중 평균을 계산해야합니다. 예 : 선택한 모든 행에 대한 인벤토리 * 가격을 총 수로 나눈 값입니다. 재고 number.Mathematically의,

(* 123.45 (7) + * 103.8 (4) + (120.8)가)/(34)

SELECT 
    Article, 
    Store, 
    Supplier, 
    NetPrice, 
    sum(Pieces) as "Pieces", 
    sum(Sum) as "Sum", 
    sum(Inventory) as "Inventory", 
    (Inventory*Price)/sum(Inventory) as "Price", 
    (Inventory*Cond)/sum(Inventory) as "Cond" 
FROM 
    table_name 
WHERE 
    "Article" = 'NL1234' 
GROUP BY 
    STORE, 
    SUPPLIER, 
    NetPrice, 
    Article 

어떻게/내 선택을 수정할 확장 할 수 있습니다 당신이 재고 열을 기준으로 그룹화되지 않기 때문에

Article Store Supplier NetPrice Pieces Sum Inventory Price Cond 
NL1234 N001 3100000 161,5  2  323 34   119,35 1,57 
+0

MySQL의 또는 SQL 서버? – Mihai

+0

아무거나, 나는 그것을하기 위하여 논리를 얻을 수 없습니다. 당신이 저를 도울 수 있다면 나는 정말로 그것을 감사 할 것입니다 –

+1

귀하의 질의는 이미 그 결과를 만들어 내야합니다. 무슨 이슈가있어? –

답변

1

당신은 캔트 사용 (재고 * 가격)/합계 (재고) : 문은 다음과 같은 출력을 얻을 수 있습니다. sum (Inventory)과 같은 통합 기능 만 사용할 수 있습니다.

SELECT 
    Article, 
    SUM(Pieces) as "Pieces", 
    SUM(Sum) as "Sum", 
    SUM(Inventory) as "Inventory", 
    SUM(Inventory * Price)/SUM(Inventory) as "Price", 
    SUM(Inventory * Cond)/SUM(Inventory) as "Cond" 
FROM 
    table_name 
WHERE 
    "Article" = 'NL1234' 
GROUP BY 
    Article 
+0

예를 들어 주시겠습니까? 이? 나는 네 제안이 맞다고 생각한다. 나는 같은 오류가 발생한다 –

+0

@SangameshHs 나는 quey를 업데이트했다. – Backs

0

그룹화하지 않을 열을 제거하고 NetPrice의 MAX를 확보하십시오.

그러나 GROUP BY 절에 Store 및 Supplier가 있어야하므로 MySQL에서는 작동하지만 MSSQL에서는 작동하지 않습니다. 출력에서 해당 열을 제거하면 MSSQL에서도 작동하도록해야합니다.

SELECT 
    Article, 
    Store, 
    Supplier, 
    MAX(NetPrice), 
    sum(Pieces) as "Pieces", 
    sum(Sum) as "Sum", 
    sum(Inventory) as "Inventory", 
    (Inventory*Price)/sum(Inventory) as "Price", 
    (Inventory*Cond)/sum(Inventory) as "Cond" 
FROM 
    table_name 
WHERE 
    "Article" = 'NL1234' 
GROUP BY 
    Article 
1

이동 자신 CROSS APPLY로 행 합계는 다음과 같이 쿼리에서 그 결과를 사용

SELECT Article, 
     Store, 
     Supplier, 
     MAX(NetPrice), 
     sum(Pieces) as "Pieces", 
     sum(Sum) as "Sum", 
     sum(Inventory) as "Inventory", 
     T.TotalInvCost/sum(Inventory) as "Price", 
     T.TotalInvCond/sum(Inventory) as "Cond" 
FROM table_name 
CROSS APPLY (
SELECT SUM(Inventory*Price) AS 'TotalInvCost' 
,SUM(Inventory*Cond) AS 'TotalInvCond' 
FROM table_name 
WHERE Article = 'NL1234' 
) T 
WHERE 
Article = 'NL1234' 
GROUP BY 
STORE, 
SUPPLIER, 
Article