행 자체의 수량 필드를 기준으로 동일한 행을 여러 개 반환하려면 어떻게 해야 합니까?
저는 오라클을 사용하여 쇼핑 앱에서 라인 아이템을 출력하고 있습니다.각 품목에는 1보다 큰 수량 필드가 있고, 만약 그렇다면 그 행을 N번 반품하고 싶습니다.
제가 말씀드리는 테이블은 이렇습니다.
product_id, quanity
1, 3,
2, 5
그리고 나는 다시 돌아올 수 있는 질문을 찾고 있습니다.
1,3
1,3
1,3
2,5
2,5
2,5
2,5
2,5
가능한가요?SQL Server 2005에 대한 이 답변을 보고 오라클에서 거의 정확한 내용을 찾고 있습니다.불행하게도 전용 번호표를 만드는 것은 선택 사항이 아닙니다.
예를 들어 최대치로 15개를 사용했는데, 9999개 또는 최대치를 지원하는 수량으로 설정해주셔야 합니다.
create table t (product_id number, quantity number);
insert into t values (1,3);
insert into t values (2,5);
select t.*
from t
join (select rownum rn from dual connect by level < 15) a
on a.rn <= t.quantity
order by 1;
먼저 샘플 데이터를 만듭니다.
create table my_table (product_id number , quantity number);
insert into my_table(product_id, quantity) values(1,3);
insert into my_table(product_id, quantity) values(2,5);
이제 다음 SQL을 실행합니다.
SELECT product_id, quantity
FROM my_table tproducts
,( SELECT LEVEL AS lvl
FROM dual
CONNECT BY LEVEL <= (SELECT MAX(quantity) FROM my_table)) tbl_sub
WHERE tbl_sub.lvl BETWEEN 1 AND tproducts.quantity
ORDER BY product_id, lvl;
PRODUCT_ID QUANTITY
---------- ----------
1 3
1 3
1 3
2 5
2 5
2 5
2 5
2 5
이 질문은 오라클에서 범위를 계산하는 방법과 동일할 수 있습니다.
Oracle 9i에 대한 솔루션 업데이트:
pipelineed_function()은 다음과 같이 사용할 수 있습니다.
CREATE TYPE SampleType AS OBJECT
(
product_id number,
quantity varchar2(2000)
)
/
CREATE TYPE SampleTypeSet AS TABLE OF SampleType
/
CREATE OR REPLACE FUNCTION GET_DATA RETURN SampleTypeSet
PIPELINED
IS
l_one_row SampleType := SampleType(NULL, NULL);
BEGIN
FOR cur_data IN (SELECT product_id, quantity FROM my_table ORDER BY product_id) LOOP
FOR i IN 1..cur_data.quantity LOOP
l_one_row.product_id := cur_data.product_id;
l_one_row.quantity := cur_data.quantity;
PIPE ROW(l_one_row);
END LOOP;
END LOOP;
RETURN;
END GET_DATA;
/
이제 다음을 수행할 수 있습니다.
SELECT * FROM TABLE(GET_DATA());
또는 이것:
CREATE OR REPLACE VIEW VIEW_ALL_DATA AS SELECT * FROM TABLE(GET_DATA());
SELECT * FROM VIEW_ALL_DATA;
둘 다 같은 결과입니다.
(내 기사 파이프라인 기능 기준)
언급URL : https://stackoverflow.com/questions/3664903/how-can-i-return-multiple-identical-rows-based-on-a-quantity-field-in-the-row-it
'programing' 카테고리의 다른 글
행의 ID로 다른 테이블에 연결된 행이 2개 이상인 이름을 가져오는 방법 (0) | 2023.09.16 |
---|---|
Docker Composes를 사용한 대화형 셸 (0) | 2023.09.16 |
What Runtime예외적으로 Spring Crud Repository가 던질 수 있습니까? (0) | 2023.09.11 |
커서 드래그로 텍스트/요소 선택을 방지하려면 어떻게 해야 합니까? (0) | 2023.09.11 |
'MySql'에 대한 엔티티 프레임워크 제공자를 찾을 수 없습니다.데이터, MySql Client' ADO.NET 프로바이더 (0) | 2023.09.11 |