2016-05-27 5 views
0

以下のクエリの各行は1つの一意の行を返します。 フィールドを2つ追加すると、jobフィールドとsuffixフィールドには、itemという数値が重複して表示されます(これは予想されます)。同じ行内の2行のフィールドを返すにはどうすればよいですか?

実際にjobsuffixの行情報を返すが、すべて1つのフィールドと1つの行をカンマで区切って返す。 See this link for a description of what I want to do。私はテーブルに書き込む能力がないので、この例を使用することはできません。これでクエリ/レポート/サブレポートのみを作成できます。これどうやってするの?

SELECT c.item, 
     c.qty_ordered         AS qty_expected, 
     Sum(j.qty_released)       AS sum_qty_released, 
     Sum(j.qty_complete)       AS sum_qty_complete, 
     (Sum(j.qty_complete) - c.qty_ordered)  AS expected_variance, 
     (Sum(j.qty_complete) - Sum(j.qty_released)) AS regular_variance, 
     j.whse 
FROM coitem AS c 
     LEFT OUTER JOIN job AS j 
        ON c.item = j.item 
         AND Dateadd(d, -6, c.due_date) = j.job_date 
WHERE j.job_date = @jobdate 
     AND j.item IN (SELECT j.item AS current_item 
         FROM job AS j 
         WHERE j.job_date = @jobdate 
          AND j.item NOT LIKE 'Indirect' 
          AND j.job NOT LIKE 'C%') 
GROUP BY c.item, 
      c.qty_ordered, 
      j.whse 
ORDER BY j.whse, 
      c.item 

更新:

私はこれを解決するためにFOR XML Pathを使用しようとしましたが、私はそれが仕事を得ることができません。私はこのエラーを取得する:

Incorrect syntax near the keyword 'FOR'. Incorrect syntax near the keyword 'GROUP'.

本のトリッキーな部分が一列に返さ私が欲しい情報が接尾仕事であるということです。ですから、私はこれらの2つのフィールドを連結してから、1つのフィールドに集計する必要があります。しかし、集計がより難しいと思ったので、それから始めてください。したがって、私の試みは集約部分にのみ焦点を合わせます。あなたがLISTAGG()を使用できるOracleでは

DECLARE @jobdate datetime = '5/30/2016' 

SELECT 


    c.item, 
    c.qty_ordered AS qty_expected, 

    j1.job, 
    j1.suffix, 
    Sum(j1.qty_released) AS sum_qty_released, 
    Sum(j1.qty_complete) AS sum_qty_complete, 
    (Sum(j1.qty_complete)-c.qty_ordered) AS expected_variance, 

    (Sum(j1.qty_complete)-Sum(j1.qty_released)) AS regular_variance, 
    j1.whse 
    STUFF(
     SELECT DISTINCT '' + j2.job 
     FROM job AS j2 
     WHERE j1.job = j2.job AND j1.suffix = j2.suffix 
     FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') 
     ,1,0,'') data 

FROM 

    coitem AS c 
    LEFT OUTER JOIN job AS j1 ON c.item = j1.item AND DATEADD(d, -6, c.due_date) = j1.job_date 

WHERE 


    j1.job_date = @jobdate AND 
    j1.item IN 

     (SELECT 

      j.item AS current_item 

     FROM 

      job AS j 

     WHERE 

      j.job_date = @jobdate AND 
      j.item NOT LIKE 'Indirect' AND 
      j.job NOT LIKE 'C%' 
     ) 

GROUP BY 

    c.item, 
    c.qty_ordered, 
    j1.whse, 
    j1.job, 
    j1.suffix 

ORDER BY 

    j1.whse, 
    c.item 
+0

'CONCAT()'は機能しませんか? – scsimon

+0

@scsimon何を連結するのですか?私がまとめたい2つの値は異なる行にあります。私は 'job'と' suffix'を連結することができました。それは簡単です。しかし実際の目標は、複数の行の値を1つの行にまとめることです。 – whatwhatwhat

+0

ごめんなさい。 '#temp'テーブルを使用できますか? – scsimon

答えて

0

これは私のコードです。 この記事では、MSSQLでそれを行う方法を説明します。 ListAGG in SQLSERVER

+0

私は試しましたが、私は2エラーが発生しました(編集された質問を参照してください) 。 – whatwhatwhat

関連する問題