2017-09-17 1 views
0

숫자 값이있는 열을 계산하고 다른 열을 포함하는 데이터 집합의 일부로 반환하는 복잡한 저장 프로 시저가 있습니다. . 그 특별한 열뿐만 아니라 같은 쿼리에서 반환하는 방법을 찾으려고 노력하고 있어요. SQL Management Studio를 사용하고 OUT 매개 변수 또는 RETURN 값을 사용하려고 생각했습니다. 그러나 할 SQL-ish 방법이 더 있다면 그것을 확실히 선호 할 것입니다.SQL - 열 결과와 열 값의 합계를 얻는 방법

SELECT 
    OrID, QN, PRID, PCKID, Person, Price, CSID, 
    CASE 
     WHEN (COUNT(*) OVER (PARTITION BY OrID)) > 1 
      THEN Price * 0.2 
      ELSE Price * 0.1 
    END AS Commission 
FROM 
    (< my subquery >) 

나는 또한 위의 진술의 결과에 SUM(Commission)를 추가하고 싶습니다. 내 데이터 (부분) 인 경우

OrID|Price 
----+----- 
1 | 100 
2 | 100 
2 | 50 
3 | 80 

나는 다음과 같은 결과

OrID|Price|Commission 
----+-----+---------- 
1 | 100 | 10 
2 | 100 | 20 
2 | 50 | 10 
3 | 80 | 8 

을 얻을 것이다 그리고 어딘가에는 마지막 열의 SUM보고 싶다 - 48
뭔가 Excel의 SUM과 같은 기능 Commission

+0

사용중인 데이터베이스에 질문을 태그하십시오. 또한 샘플 데이터와 원하는 결과를 제공하십시오. –

답변

1

하위 쿼리를 사용할 수 있습니다 :

SELECT s.*, SUM(Commission) OVER (PARTITION BY OrId) as sum_commission 
FROM (SELECT OrID, QN, PRID, PCKID, Person, Price, CSID 
      (CASE WHEN (count(*) OVER (PARTITION BY OrID)) > 1 
        THEN Price*0.2 
        ELSE Price*0.1 
       END) AS Commission 
     FROM (< my subquery > 
      ) s 
    ) s; 

OrId으로 원한다고 가정합니다. partition by을 제거하지 않은 경우

+0

이제 s. *의 각 열에 대해 "집계 함수 또는 GROUP BY 절에 포함되어 있지 않기 때문에 선택 목록에 유효하지 않습니다."라는 메시지가 나타납니다. 하위 쿼리의 첫 번째 열에 GROUP BY를 추가하려고 시도했으며 다음에 오류가 발생했습니다. 약간의 오류에 대해 읽으려고합니다. 누군가가 읽을 좋은 링크가 있습니까? –

+0

@LouisShraga. . . 나는 검색어에 오타가 있었다. 그것은 그 오류를 생성하는 것이 놀랍습니다. –

+0

처음부터 올바른 방법으로 쿼리를 변경했습니다. 오류는 아마도 관련이 없습니다. 훨씬 간단한 쿼리와 외부 쿼리가 내부 쿼리에서 열을 가져 오려고 할 때마다 재생하려고했는데 -이 오류가 발생합니다. 외부 쿼리에서 SUM (Commission) 만 가져 오는 것이 좋습니다. 그렇지만 물론 출력에서 ​​하나의 열만 가져오고 모든 데이터가 포함 된 보고서로 가져 오려고합니다. GROUP BY 문에 모든 내부 쿼리 열을 추가하면이 모든 것이 완전히 새로운 열에 Commission의 SUM 만 표시되므로 쓸모가 없습니다. 동일한 레코드에만 –

관련 문제