将数据从一个表导出到另一个具有不同结构的表中

时间:2016-05-05 09:44:08

标签: sql sql-server

首先,我想对任何错误/误解道歉,因为英语不是我的自然语言。

上下文:我需要提取存储在一个表中的数据(实际上它是连接两个表的结果)并将其显示在报表中。请在下面找到我想要显示的数据。

假设源表中包含以下结构和数据: Source Table

我希望得到一个包含以下结构和数据的表:

Result table

结果表将始终包含从星期日到星期六的列(每周每天3列,以表示当天的3个不同值。

通过对源表使用游标将数据注入结果表(临时表),我找到了解决问题的方法。但我想避免使用游标。

P.S。我正在使用SQlServer 2014作为dbms和Visual Studio2015来设计报告。

2 个答案:

答案 0 :(得分:0)

SELECT code,
       [SUN_nCollects] = MAX(CASE WHEN day = 'SUN' THEN nCollects  END),
       [SUN_nDels]     = MAX(CASE WHEN day = 'SUN' THEN nDels      END),
       [SUN_%]         = MAX(CASE WHEN day = 'SUN' THEN percentage END),
       [MON_nCollects] = MAX(CASE WHEN day = 'MON' THEN nCollects  END),
       [MON_nDels]     = MAX(CASE WHEN day = 'MON' THEN nDels      END),
       [MON_%]         = MAX(CASE WHEN day = 'MON' THEN percentage END),
       . . . .
FROM   source
GROUP BY code

答案 1 :(得分:0)

创建测试数据;

SELECT
a.Code
,ISNULL(SUM(CASE WHEN a.day = 'SUN' THEN a.nCollects END),0) SUN_nCollects
,ISNULL(SUM(CASE WHEN a.day = 'SUN' THEN a.nDels END),0) SUN_nDels
,CONVERT(int,(ISNULL(SUM(CASE WHEN a.day = 'SUN' THEN a.nCollects END),0)/ISNULL(SUM(CASE WHEN a.day = 'SUN' THEN a.nDels END),1))*100) [SUN%]
,ISNULL(SUM(CASE WHEN a.day = 'MON' THEN a.nCollects END),0) MON_nCollects
,ISNULL(SUM(CASE WHEN a.day = 'MON' THEN a.nDels END),0) MON_nDels
,CONVERT(int,(ISNULL(SUM(CASE WHEN a.day = 'MON' THEN a.nCollects END),0)/ISNULL(SUM(CASE WHEN a.day = 'MON' THEN a.nDels END),1))*100) [MON%]
,ISNULL(SUM(CASE WHEN a.day = 'TUE' THEN a.nCollects END),0) TUE_nCollects
,ISNULL(SUM(CASE WHEN a.day = 'TUE' THEN a.nDels END),0) TUE_nDels
,CONVERT(int,(ISNULL(SUM(CASE WHEN a.day = 'TUE' THEN a.nCollects END),0)/ISNULL(SUM(CASE WHEN a.day = 'TUE' THEN a.nDels END),1))*100) [TUE%]
,ISNULL(SUM(CASE WHEN a.day = 'WED' THEN a.nCollects END),0) WED_nCollects
,ISNULL(SUM(CASE WHEN a.day = 'WED' THEN a.nDels END),0) WED_nDels
,CONVERT(int,(ISNULL(SUM(CASE WHEN a.day = 'WED' THEN a.nCollects END),0)/ISNULL(SUM(CASE WHEN a.day = 'WED' THEN a.nDels END),1))*100) [WED%]
FROM #TableName a
GROUP BY a.Code

提供您想要答案的T-SQL;

{{1}}