2017-07-04 11 views
0

この質問は以前の質問と似ていますが、私は解を見つけることができません。ピボットでの注文方法は?

私はこのクエリ

CREATE TABLE #SampleData 
(
    Name varchar(10), 
    Location varchar(20), 
    Item varchar(10), 
    Date varchar(8) 
) 
INSERT INTO #SampleData 
VALUES 
('Ron', 'Loc A', 'Pencil', '20170610'), 
('Ron', 'Loc A', 'Pencil', '20170611'), 
('Ron', 'Loc B', 'Pen', '20170610'), 
('Ron', 'Loc B', 'Laptop', '20170611'), 
('Tom', 'Loc A', 'Pencil', '20170611'), 
('Tom', 'Loc B', 'Pencil', '20170610'), 
('Tom', 'Loc B', 'Pen', '20170610'), 
('Tom', 'Loc A', 'Pencil', '20170610'), 
('Tom', 'Loc A', 'Laptop', '20170610'), 
('Tom', 'Loc A', 'Pencil', '20170610') 

    DECLARE @Pivot_Columns AS VARCHAR(MAX), 
      @select_Columns VARCHAR(max) 

    SELECT @Pivot_Columns = Stuff((SELECT DISTINCT ',' + Quotename(Item) FROM #SampleData FOR xml path('')), 1, 1, '') 
    SELECT @select_Columns = Stuff((SELECT DISTINCT ',Sum(' + Quotename(Item) + ') as '+Quotename(Item) FROM #SampleData FOR xml path('')), 1, 1, '') 

    DECLARE @SQL AS VARCHAR(MAX) 

    SET @SQL = 'SELECT case when grouping(location) = 1 and grouping(name) = 0 then ''Total''+ '' '' + name 
    when grouping(location) = 1 and grouping(name) = 1 then ''Total'' 
    else name end Name, 
    case when grouping(location) = 1 and grouping(name) = 0 then CONVERT(varchar(10), COUNT(Distinct location)) 
    when grouping(location) = 1 and grouping(name) = 1 then CONVERT(varchar(10), COUNT(Distinct location)) 
    else Location end Location, 
    '+ @select_Columns + ' 
    FROM 
    (
     SELECT name, location, item 
     FROM #SampleData 

    ) as PivotData 
    PIVOT 
    (
     count(item) 
     for item IN (' 
       + @Pivot_Columns + ') 
    ) AS PivotResult 
    group by name,location with rollup 
    ' 

    EXEC(@SQL) 

と、このような結果があります:私のクエリは次のようになりますどのように注文する

enter image description here

を? theresの場合は私の場所のないカウントは私のクエリは、事前に、感謝を私はこの問題を解決するソリューションを必要とenter image description here

正常に動作しません!

答えて

0

このタイプの出力は受け入れ可能ですか?

Name    Location    Laptop  Pen   Pencil 
---------------- -------------------- ----------- ----------- ----------- 
Ron    Loc A    0   0   2 
Ron    Loc B    1   1   0 
Ron Total  2     1   1   2 
Tom    Loc B    0   1   1 
Tom    Loc A    1   0   3 
Tom Total  2     1   1   4 
Total   2     2   2   6 

私が使用しているクエリ:

DECLARE @Pivot_Columns AS VARCHAR(MAX), 
     @select_Columns VARCHAR(max) 

SELECT @Pivot_Columns = Stuff((SELECT DISTINCT ',' + Quotename(Item) FROM #SampleData FOR xml path('')), 1, 1, '') 
SELECT @select_Columns = Stuff((SELECT DISTINCT ',Sum(' + Quotename(Item) + ') as '+Quotename(Item) FROM #SampleData FOR xml path('')), 1, 1, '') 

DECLARE @SQL AS VARCHAR(MAX) 

SET @SQL = 'SELECT case when grouping(location) = 1 and grouping(name) = 0 then name + '' ''+ ''Total'' 
when grouping(location) = 1 and grouping(name) = 1 then ''Total'' 
else name end Name, 
case when grouping(location) = 1 and grouping(name) = 0 then CONVERT(varchar(10), COUNT(Distinct location)) 
when grouping(location) = 1 and grouping(name) = 1 then CONVERT(varchar(10), COUNT(Distinct location)) 
else Location end Location, 
'+ @select_Columns + ' 
FROM 
(
    SELECT name, location, item 
    FROM #SampleData 

) as PivotData 
PIVOT 
(
    count(item) 
    for item IN (' 
      + @Pivot_Columns + ') 
) AS PivotResult 
group by name,location with rollup 
ORDER BY GROUPING (name), name' 

EXEC(@SQL) 
+0

を私は私のテーブルの下に合計下記期日までに多くの合計を持っているので、私は、そうは思いません。 –

+0

申し訳ありませんが、私の答えは削除されます –

関連する問題