2016-07-15 4 views
0

キーごとに1つの行を持つマスターテーブルと、説明があるシーケンスフィールドを持つキーごとに多数の行を持つ詳細テーブルフィールド私は一緒に連結し、キーごとに1つの行を作成する必要があります。私のコードはこれでうまくいきますが、詳細データ行に正しい順序で連結されたデータがありません。データはExcelスプレッドシートで私に届き、インポートウィザードを使用してデータをデータベースに追加します。詳細データでは順序が正しくないので、STUFF WITH XML PATHへの入力であるキーとシーケンス番号でデータをソートするためにサブ選択を追加しました。私はまだ間違った順序でデータを取得しています。最初にスプレッドシートのデータをソートしてデータベースにロードすると、正常に動作します。私はこれを私のチームに配布したいので、これを動的に動作させる必要があります。私たちはそれを別のテーブルに使うことができます。 STUFF FOR XML PATHでサブ選択が機能しない理由についてのアイデアはありますか?私は何が必要なの?ここで結合でSQLクエリを取得し、STUFFとFOR XML PATHを使用して正しくソートする方法

は、私が持っているコードです:

SELECT pic, pisc, piin 
    , STUFF((SELECT ' ' + P.PIIDTA FROM PI115AP P 
    Where P.PIC =B.PIC 
    and P.PISC = B.PISC 
    and P.PIIN = B.PIIN FOR XML PATH(''), type 
    ).value('.', 'nvarchar(max)'),1,1,'') As CombinedDetail 
    From 
    (select TOP 100 PERCENT 
     pic, pisc, piin, piisn, piidta 
    from PI115AP 
    order by pic, pisc, piin, piisn) B 
    Group By B.PIC, B.pisc, B.piin 

ありがとうございました!

+0

あなたの現在の質問とあなたの期待する結果を教えてください。 – TheGameiswar

+0

#TheGameiswar - この問題は、連続する行の間に行がある場合にのみ発生します。詳細データは15,000行以上あり、Iと – Cass

+0

Sorry #TheGameiswar - この問題は、連続する行の間に行がある場合にのみ発生します。たとえば、私は 200 072 00002 1 PERMを持つことができます。押す; 7 UNBREAKABLE BUTTON e01 00600003 1 SOME TEXT more rows ... 200 072 00002 2 FRONT; 2つのポケット、1つの偽& さらに多くの行 結合されたデータには、seq 3、seq1、seq5があります。レジュールはseq1データ、seq2データなどでなければなりません。コメントを追加するスペースが限られているので、私はこれを凝縮したので、意味があると思う。 – Cass

答えて

0

これは、あなたが望むように動作するために、多くの部分と部品があります。サブクエリには順序がないため、FOR XMLは必要な順序ではありません。実際の結果セットは、メインクエリに注文がないため、どちらかの順序ではありません。私はBサブクエリのポイントを本当に理解していません。 topは、topを使用しているときに実際の結果を並べるのではなく、取り出す行を定義するだけです。

あなたはこれ以上のようなものがほしいと確信しています。

SELECT pic 
    , pisc 
    , piin 
    , STUFF((SELECT ' ' + P.PIIDTA 
      FROM PI115AP P 
      Where P.PIC = B.PIC 
       and P.PISC = B.PISC 
       and P.PIIN = B.PIIN 
      order by p.pic 
       , p.pisc 
       , p.piin 
       , p.piisn 
      FOR XML PATH(''), type 
    ).value('.', 'nvarchar(max)'),1,1,'') As CombinedDetail 
From PI115AP B 
Group By B.PIC 
    , B.pisc 
    , B.piin 
order by b.pic 
    , b.pisc 
    , b.piin 
+0

#Sean Lange、返事をありがとう。私はサブセレクトで注文yを持っています。これは、サブクエリです: はPIC、PISC、piin、piisn そして、あなたのコードでPI115AP 順からTOP 100 PERCENT PIC、PISC、piin、piisn、piidta を選択するには、私に次のエラーを与える: メッセージ8127 、レベル16、状態1、行24 列 "PI115AP.PIISN"は、集計関数またはGROUP BY句に含まれていないため、ORDER BY句では無効です。 – Cass

+0

STUFFのサブクエリには、ではない注文があります。私は実際に私が投稿したクエリをテストすることはできません。なぜなら、私は何の問題もないからです。私はその盲目をコード化した。 –

+0

#Sean Lange、スタッフのサブクエリは、piisnが選択されていないために順序を持つことができません。他の3つのフィールドレベルに連結されたデータが必要です。 私は何を得ることはありませんが、正しい順序でデータを返す サブクエリ (PIC、PISC、piin、piisnによってPI115AP 順からTOP 100 PERCENT PIC、PISC、piin、piisn、piidta を選択)であります。私はSTUFFクエリへのフィードでしたが、STUFFは正しい順序で入れていません。 – Cass

関連する問題