2017-12-07 9 views
2

DataDescription行を列にピボットし、Number *列を新しい列にエイリアスされた行にピボットしないようにしようとしています。TSQLピボットスイッチ

所望の列は次のようになります。以下

Location, 2016-01-01, 2016-01-02, 2016-01-03, 2016-01-04, 2016-01-05,CountType 

設定するためのコードは、シナリオです。これはC#またはTSQLでもっときれいに行うことができますか?助言がありますか?

if (object_id('tempdb..#data') is not null) 
    begin 
     drop table #data 
    end 

    create table #data 
    (
     DateDescription VARCHAR(50), 
     Location VARCHAR(50), 
     NumberOfVisits INT, 
     NumberOfPositiveVisits INT, 
     NumberOfNegativeVisits INT 
    ) 

    insert into #data 
    SELECT '2016-01-01', 'SiteA', 100, 80, 20 
    union all 
    SELECT '2016-01-02', 'SiteA', 95, 81, 21 
    union all 
    SELECT '2016-01-03', 'SiteA', 95, 81, 21 
    union all 
    SELECT '2016-01-04', 'SiteA', 95, 81, 21 
    union all 
    SELECT '2016-01-05', 'SiteA', 95, 81, 21 
    union all 
    SELECT '2016-01-01', 'SiteB', 95, 81, 21 
    union all 
    SELECT '2016-01-02', 'SiteB', 95, 81, 21 
    union all 
    SELECT '2016-01-03', 'SiteB', 95, 81, 21 
    union all 
    SELECT '2016-01-04', 'SiteB', 95, 81, 21 
    union all 
    SELECT '2016-01-05', 'SiteB', 95, 81, 21 

    select * from #data 

答えて

2

何かが動作します:

SELECT 
    Location 
    , [2016-01-01] 
    , [2016-01-02] 
    , [2016-01-03] 
    , [2016-01-04] 
    , [2016-01-05] 
    , CountType 
FROM 
    (
     SELECT 
      DateDescription 
      , Location 
      , [Count] 
      , CountType 
     FROM 
      (
       SELECT 
        DateDescription 
        , Location 
        , NumberOfVisits 
        , NumberOfPositiveVisits 
        , NumberOfNegativeVisits 
       FROM #data 
      ) Q 
      UNPIVOT 
      (
       [Count] 
       FOR CountType IN ([NumberOfVisits], [NumberOfPositiveVisits], [NumberOfNegativeVisits]) 
      ) U 
    ) Q 
    PIVOT 
    (
     MAX([Count]) 
     FOR DateDescription IN ([2016-01-01], [2016-01-02], [2016-01-03], [2016-01-04], [2016-01-05]) 
    ) P 
ORDER BY 
    Location 
    , CountType DESC 
何をあなたは CountType列から期待しますが、次のように行われる可能性があるグループ化わかりません
1

あなたがT-Sql解決策を探しているなら、あなたはおそらくPivot capabilitites掘り下げたいと思います。

はこのような
SELECT Location 
     ,[2016-01-01] 
     ,[2016-01-02] 
     ,[2016-01-03] 
     ,[2016-01-04] 
     ,[2016-01-05] 
     ,[Type] 
FROM (
    SELECT [DateDescription] 
      ,Location 
      ,NumberOfVisits as visits 
      ,'Total' AS [Type] 
    FROM #data) AS Source 
PIVOT 
(
    SUM(visits) 
    FOR 
    DateDescription IN 
    (
     [2016-01-01] 
     ,[2016-01-02] 
     ,[2016-01-03] 
     ,[2016-01-04] 
     ,[2016-01-05] 
    ) 
) AS PivotTable 

UNION  

SELECT Location 
     ,[2016-01-01] 
     ,[2016-01-02] 
     ,[2016-01-03] 
     ,[2016-01-04] 
     ,[2016-01-05] 
     ,[Type] 
FROM (
    SELECT [DateDescription] 
      ,Location 
      ,NumberOfPositiveVisits as visits 
      ,'Positive' AS [Type] 
    FROM #data) AS Source 
PIVOT 
(
    SUM(visits) 
    FOR 
    DateDescription IN 
    (
     [2016-01-01] 
     ,[2016-01-02] 
     ,[2016-01-03] 
     ,[2016-01-04] 
     ,[2016-01-05] 
    ) 
) AS PivotTable 

UNION 

    SELECT Location 
     ,[2016-01-01] 
     ,[2016-01-02] 
     ,[2016-01-03] 
     ,[2016-01-04] 
     ,[2016-01-05] 
     ,[Type] 
FROM (
    SELECT [DateDescription] 
      ,Location 
      ,NumberOfNegativeVisits as visits 
      ,'Negative' AS [Type] 
    FROM #data) AS Source 
PIVOT 
(
    SUM(visits) 
    FOR 
    DateDescription IN 
    (
     [2016-01-01] 
     ,[2016-01-02] 
     ,[2016-01-03] 
     ,[2016-01-04] 
     ,[2016-01-05] 
    ) 
) AS PivotTable;