2013-07-15 3 views
1

Crystal Reports에 XML 데이터 집합으로 전달할 수있는 SQL보기를 만들어야합니다.SQL은 수량에 따라 행을 복제합니다.

일예 :

나는 그 양에 따라 기록 (제품 항목)를 복제 할 필요가 이 :

| Product ID | Product Name | Quantity 
----------------------------------------- 
    0001  Product 1  5 
    0002  Product 2  3 

이되다 :

| Product ID | Product Name | Quantity 
----------------------------------------- 
    0001  Product 1  5 
    0001  Product 1  5 
    0001  Product 1  5 
    0001  Product 1  5 
    0001  Product 1  5 
    0002  Product 2  3 
    0002  Product 2  3 
    0002  Product 2  3 

어떻게 양에 따라 SQL을 사용하여 기록을 복제 할 수 있습니다?

+2

당신은 핸디 번호 테이블 (* n 개의 * 0 또는 1의 값이있는 테이블이 있나요 큰 숫자)? 그랬다면 Numbers.Value <= Product.Quantity에서 행을 복제 할 수 있습니다. –

+0

나는 숫자 표를 만들지 않았다. – samb90

+0

내 제안은 하나를 만들고, 숫자로 채우고, 단순히 기록을 복제하기 위해 참여하는 것이다. http://sqlblog.com/blogs/adam_machanic/archive/2006/07/12/you-require-a-numbers-table.aspx를 작성하는 방법은 여기를 참조하십시오. BTW, 어떤 SQL 데이터베이스를 사용하고 있습니까? –

답변

3

의해 data.l < = item.quantity ORDER 다음은 재귀 공통 테이블 식을 기반으로 한 솔루션입니다.

WITH CTE(ProductID, RowIndex) AS 
    (
     SELECT 
      ProductID 
      ,Quantity AS RowIndex 
     FROM [TableName] 
     WHERE Quantity > 0 
     UNION ALL 
     SELECT 
      ProductID 
      ,RowIndex - 1 
     FROM CTE 
     WHERE RowIndex - 1 > 0 
    ) 

SELECT Tbl1.* 
FROM [TableName] AS Tbl1 
INNER JOIN CTE AS Tbl2 
    ON Tbl1.ProductID = Tbl2.ProductID 
ORDER BY Tbl1.ProductID 

은 테이블의 이름으로 TableName을 대체, 위의 코드를 사용합니다. * n 개의 *가 어디

테스트 테이블

| ProductID | ProductName | Quantity | 
-------------------------------------- 
    0001  Product 1  5 
    0002  Product 2  3 
    0003  Product 3  2 
    0004  Product 4  0 

결과 코드를 실행 한 후

| ProductID | ProductName | Quantity | 
-------------------------------------- 
    0001  Product 1  5 
    0001  Product 1  5 
    0001  Product 1  5 
    0001  Product 1  5 
    0001  Product 1  5 
    0002  Product 2  3 
    0002  Product 2  3 
    0002  Product 2  3 
    0003  Product 3  2 
    0003  Product 3  2 
+0

솔루션을 제공해 주셔서 감사합니다. 코드가 실행 중이지만 테이블의 첫 번째 제품에는 처음 두 제품 (Product1.Quantity + Product2.Quantity)의 합계와 같은 레코드 번호가 포함됩니다. 그러나 제품 2에는 올바른 수의 레코드가 들어 있습니다. 이것이 일어나는 이유에 대한 아이디어가 있습니까? – samb90

+0

똑같은 코드를 실행하고 있습니까? –

+0

나는 그것이 고정되어 :) – samb90

-1

SELECT 항목. * FROM 데이터 항목 (< = largest_number LEVEL BY DUAL CONNECT로부터 L 레벨 해당) WHERE item.id

+0

이것은 MSSQL이 아니라 오라클을위한 해결책이다. –

관련 문제