鉴于:
+-----------+---------------+-------------+-------+
| Name | Location | Description | Value |
+-----------+---------------+-------------+-------+
| Company A | Houston | Sales | 100 |
| Company A | Houston | Profit | 50 |
| Company B | San Francisco | Sales | 500 |
| Company B | San Francisco | Profit | 200 |
| Company C | New York | Sales | 200 |
| Company C | San Francisco | Profit | 150 |
+-----------+---------------+-------------+-------+
如何使用SQL将其转换为:
+----------+---------------+--------+---------+
| Name | Location | Sales | Profit |
+----------+---------------+--------+---------+
| CompanyA | Houston | 100 | 50 |
| CompanyB | San Francisco | 500 | 200 |
| CompanyC | New York | 200 | 150 |
+----------+---------------+--------+---------+
要将数据转换为所需的形式,您可以执行以下操作:
SELECT NAME
,LOCATION
,SUM (CASE WHEN DESCRIPTION = 'Sales' THEN Values ELSE 0 END) AS SALES
,SUM (CASE WHEN DESCRIPTION = 'Profit' THEN Values ELSE 0 END) AS PROFIT
FROM yourtable
GROUP BY NAME
,LOCATION
假设您的描述值仅为销售和利润,这里有一个CTE解决方案。我在前面调用了初始表。
with cteSales as (select name, value from Before where description = 'Sales')
, cteProfit as (select name, value from Before where description = 'Profit')
select
distinct
name
, location
, (select value from cteSales where name = B.name) as Sales
, (select value from cteProfit where name = B.name) as Profit
from Before B
尝试1或2查询:http://sqlfiddle.com/#!6/bb33b/7
第二个给出了您的问题中显示的确切结果,但我猜第一个是您正在寻找的。
SELECT Name, Location,
Sum( Case Description when 'Sales' Then Value else 0 end ) Sales,
Sum( Case Description when 'Profit' Then Value else 0 end ) Profit
FROM table1
GROUP BY Name, Location
Order by 1,2
;
| Name | Location | Sales | Profit |
|-----------|---------------|-------|--------|
| Company A | Houston | 100 | 50 |
| Company B | San Francisco | 500 | 200 |
| Company C | New York | 200 | 0 |
| Company C | San Francisco | 0 | 150 |
SELECT Name, Min( Location ) As Location,
Sum( Case Description when 'Sales' Then Value else 0 end ) Sales,
Sum( Case Description when 'Profit' Then Value else 0 end ) Profit
FROM table1
GROUP BY Name
Order by 1,2
;
;
| Name | Location | Sales | Profit |
|-----------|---------------|-------|--------|
| Company A | Houston | 100 | 50 |
| Company B | San Francisco | 500 | 200 |
| Company C | New York | 200 | 150 |
问题内容: 我已经徒劳地搜索了很长时间,不得不承认失败并寻求帮助,我正在尝试修改数据透视查询,以从具有以下数据的表中生成结果的动态查询: 为了显示这样的内容,其中页码列取决于用户访问的页面数: 我已经通过对列中的硬编码进行了管理,但是显然我不想继续更改脚本以容纳越来越多的页面。 到目前为止,我有一些类似的东西: 任何帮助或正确方向的指点将不胜感激! 提前致谢! 问题答案: 我所看到的关于动态枢轴的
问题内容: 需要将此查询转换为SQL Server 我已经阅读了所有其他帖子,但无法将其转换为相同的帖子 问题答案: 这是使用表运算符的等效版本: SQL小提琴演示 例如,这将为您提供: 请注意, 使用MS SQL Server表运算符时,必须输入数据透视列的值。然而,在MS Access,这是该作品是用做的,这是动态获取枢转列的值。在这种情况下,您必须与操作员一起动态地执行此操作,如下所示: 更
问题内容: 我在SQL Server 2008中具有下表: 我需要创建以下输出的查询: 列可以固定为[Mitarbeiter1]-[Mitarbeiter5],因为每个Filiale的行数不能超过5行。 非常感谢您的帮助! 问题答案: 使用SQL Server 2008,将Pivot和Rank函数组合在一起,可以为每个雇员数量提供理想的结果。首先,我们为每个分支中的每个员工分配一个ID,从每个新分
问题内容: 我有一个如下所示的表。我的问题是:如何将列转换为行?我正在使用Microsoft SQL Server 我需要像下面的操作 怎么做?谢谢 问题答案: 您的资料 询问 结果集
我已经读过关于MS透视表的东西,但我仍然有问题得到正确的这一点。 我有一个正在创建的临时表,我们会说第1列是一个商店号,第2列是一个星期号,最后第3列是某种类型的总数。而且周数是动态的,商店数是静态的。 我希望它作为一个透视表出来,像这样: 商店的数字下侧和周横跨顶部。
问题内容: 我在一个专栏中看到了很多关于PIVOT的问题,每个问题都比其他问题复杂,但是,找不到所需的东西。 老实说,在这种情况下,我什至不知道枢轴是否对我有帮助。 假设我的源表中有以下数据: 最多5行,包含名字和姓氏。第一和最后一列的值将是随机的。 我试图将这些数据转换为如下形式: 例如:如果列First5和Last5为NULL,因为只有4行,我没有任何问题。 任何人都可以给我一点帮助吗?谢谢。