0

動的ピボット SQL クエリを実行して、次のような結果を取得します。 ここに画像の説明を入力

そのための私のクエリを以下に示します。

    DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

    select @cols = STUFF((SELECT distinct ',' + QUOTENAME(AssortmentSize) 
                    from tbl_Assortment_Qty WHERE Head_Id=325
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

    set @query='SELECT                                                                      Description,AssortmentType, '+@cols+',ISNULL (size_unit_price,0) UnitPrice from 
             (
                SELECT DISTINCT H.Description,AssortmentType,AssortmentSize,AssortmentQty,B.size_unit_price FROM dbo.tbl_Assortment_Qty Q
                INNER JOIN 
dbo.tbl_Fabric_Order_Head H
 ON H.Head_ID=Q.Head_ID
 LEFT OUTER JOIN
 dbo.Budget_Accessories_Qty B
 ON B.head_Id=Q.Head_Id
 AND B.accessories=Q.AssortmentType

 WHERE Q.head_id=325
 ) x
            pivot 
            (
                SUM(AssortmentQty)
                for AssortmentSize in (' + @cols + ')
            ) p '

execute(@query)

ここで、結果のデータテーブルを Crystal レポートに直接出力したいと考えています。ヘッダー名はそのままで、そのまま欲しいです。今、私はこれで完全に立ち往生しています。Crystal レポートで固定された列は動的であるため、定義できません。サイズ c(L、M、S、XL) は他のものである可能性があり、私はクリスタル レポートの専門家ではありません。私が必要とする最も簡単な答えは、列フィールドを定義せずにDATATABLEをCrystalレポートに直接印刷する方法ですか??

4

2 に答える 2

0

マンモス検索の後、私は最終的に、私の側でクリスタルレポートを使用して、私が望むことは不可能であるという決定に至りました。そのため、PIVOT を使用せずに、クエリを単純化してクロス集計を使用しています。今、私の結果セットは次のようになります。 ここに画像の説明を入力

于 2013-07-21T02:42:40.320 に答える
0

私の知る限り、最初に値のプレースホルダーを指定せずに DataTable をレポートに直接出力する方法はありません。解決策として、この記事http://www.codeproject.com/Articles/20670/Dynamic-Crystal-Report-with-Cで使用されている手法を使用できます。

于 2013-07-20T21:11:42.410 に答える