首先,我想对任何错误/误解道歉,因为英语不是我的自然语言。
上下文:我需要提取存储在一个表中的数据(实际上它是连接两个表的结果)并将其显示在报表中。请在下面找到我想要显示的数据。
假设源表中包含以下结构和数据: Source Table
我希望得到一个包含以下结构和数据的表:
结果表将始终包含从星期日到星期六的列(每周每天3列,以表示当天的3个不同值。
通过对源表使用游标将数据注入结果表(临时表),我找到了解决问题的方法。但我想避免使用游标。
P.S。我正在使用SQlServer 2014作为dbms和Visual Studio2015来设计报告。
答案 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}}