group sum에 대한 세부 내역 출력 0 3 2,182

by 마늘장아찌 sql [2014.12.12 11:23:05]


WITH tmp AS
(SELECT 'A' code1, 'X' code2, 1 qty FROM dual UNION ALL
SELECT 'A' code1, '' code2, 2 qty FROM dual UNION ALL
SELECT 'A' code1, '' code2, 1 qty FROM dual UNION ALL
SELECT 'B' code1, '' code2, 3 qty FROM dual UNION ALL
SELECT 'C' code1, 'X' code2, 2 qty FROM dual)
SELECT *
FROM tmp

 

sample이 위와 같을때 결과를 다음과 같이 뽑고 싶습니다.

code1  qty  description

=================

A         4    A3 + X1

B        3

C       2

=================

즉, code1으로 group을 하여 SUM(qty)하는데 문제는 description 부분입니다.

code2에 대해서는 X 또는 Null 두가지 값인데 값이 둘중에 하나만 있으면 desc은 필요없고

둘이면 code1 갯수 + code2 갯수 형태로 보여주면 됩니다.

self join 말고 한 table상에서 하려고 하는데 잘 안되네요...

감사합니다.

by 아발란체 [2014.12.12 11:29:21]

a qty는 4가 되어야 하는 것이 아닌가요? 2 + 1 + 1 = 4


by 아발란체 [2014.12.12 11:44:52]
WITH tmp AS (
  SELECT 'A' code1, 'X' code2, 1 qty FROM dual UNION ALL
  SELECT 'A' code1, '' code2, 2 qty FROM dual UNION ALL
  SELECT 'A' code1, '' code2, 1 qty FROM dual UNION ALL
  SELECT 'B' code1, '' code2, 3 qty FROM dual UNION ALL
  SELECT 'C' code1, 'X' code2, 2 qty FROM dual
)
SELECT
  code1, SUM(qty) AS qty1, 
  CASE WHEN(MAX(DECODE(code2, 'X', 1, 0)) +  MAX(DECODE(code2, '', 1, 0)) > 1)
    THEN
      CODE1||COUNT(*)||'+X'||SUM(DECODE(code2, 'X', 1))
    ELSE
      NULL
  END AS description
FROM
  tmp
GROUP BY
  code1

 


by 마늘장아찌 [2014.12.12 11:46:52]

네 4가 맞습니다. 수정했습니다.

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입