저는 PL/SQL에서 새로운 제품입니다.오라클 쿼리의 행 수가 동일합니다.
일부 구매 항목과 날짜를 표시하려고 쿼리를 작성하려고합니다. 그 점은 쿼리의 결과가 나에게 가장 큰 하위 집합의 수에 따라 각 날짜의 행 수가 같은 일종의 그룹 별을 반환하도록하고 싶습니다.
select date_val, cost
from test
order by date_val
나에게이 결과 제공 : 여기
오라클에 대한 예제이다이 경우
date_val cost
03/04/2017 950907.12
03/04/2017 10935431.88
03/04/2017 1411410
03/04/2017 504604380
04/04/2017 1348410
05/04/2017 1379000560
05/04/2017 1208340
05/04/2017 1735016.32
06/04/2017 15913063.36
06/04/2017 1383744.64
06/04/2017 1522710
06/04/2017 1172111669
07/04/2017 278336734
07/04/2017 579649.52
을, 가장 큰 부분 집합의 길이 (4입니다 03과 06 날짜) 그래서 나는 테이블을 완성하고 다음과 같은 것을 얻고 싶습니다 :
date_val cost
03/04/2017 950907.12
03/04/2017 10935431.88
03/04/2017 1411410
03/04/2017 504604380
04/04/2017 1348410
04/04/2017 0
04/04/2017 0
04/04/2017 0
05/04/2017 1379000560
05/04/2017 1208340
05/04/2017 1735016.32
05/04/2017 0
06/04/2017 15913063.36
06/04/2017 1383744.64
06/04/2017 1522710
06/04/2017 1172111669
07/04/2017 278336734
07/04/2017 579649.52
07/04/2017 0
07/04/2017 0
어떤 제안이라도 도움이 될 것입니다.
미리 감사드립니다.
이with t as (
select date_val, cost,
row_number() over (partition by date_val order by cost) as seqnum
from test
)
select d.date_val, coalesce(t.cost, 0) as cost
from (select distinct date_val from t) d cross join
(select distinct seqnum from t) s left join
t
on d.date = t.date and s.seqnum = t.seqnum
order by d.date_val;
아이디어는 각 날짜에 대해 각 행에 일련 번호를 추가하는 것입니다
날짜가'date' 데이터 유형입니까? (그렇지 않다면 왜 안 되겠습니까?) 그렇다면 시간 구성 요소는 무엇입니까? 오라클에서 '날짜'는 화면에 표시되지 않더라도 항상 시간 구성 요소를 포함합니다. 모든 날짜에 '00 : 00 : 00'의 시간이있을 수 있습니다 (시간을 사용하지 않고 날짜를 "순수"날짜로 만드는 일반적인 방법) - 그 경우입니까? – mathguy
또한 날짜가 완전히 누락 된 경우 (04/04의 행이 없다고 가정 해 보겠습니다.) 결과에 행 추가가 필요하겠습니까? 4 행, 각 행의 비용은 0입니다. – mathguy
안녕하세요! 네, 데이터 타입은 날짜입니다.하지만 여러분이 말했듯이, 그것들은 순수한 날짜이며 시간은 없습니다. 그리고 다른 질문에 대해, 나는 오직 04/04가 전혀 나타나지 않는다면 나는 그것을보고 싶지 않지만 적어도 1 개의 레코드를 가지고 있다면 그것을 가지고 테이블에있는 날짜를 표시하고 싶습니다. 나머지 기록을 비용 0으로 채우십시오. –