SQL Server Pivot-不同的值

时间:2018-09-04 18:37:01

标签: sql-server

我想透视表SQL Server中的销售总额。

我的表比下面的表稍微复杂一些,但这是一个很好的例子:

enter image description here

我追求的枢轴应如下所示:

enter image description here

使用MS Excel显然很简单,但是,由于我的数据非常庞大,因此将其存储在SQL Server的表中。因此,如上例所示,我需要向数据透视表编写查询。

我写的是:

SELECT DISTINCT [Day] FROM [TABLE]
PIVOT (SUM(Cost) FOR [Prod] IN([Coke], [Pepsi], [Tango])) AS PIVOTSALES

但是,我无法获得所需的结果。任何建议如何进行将不胜感激。

2 个答案:

答案 0 :(得分:0)

您仅选择Day。您需要将其他列添加到SELECT列表中。

将当前查询与解决方案here进行比较。

答案 1 :(得分:0)

您非常接近,您只需要将数据透视表字段添加到SELECT列表中(并删除该DISTINCT,因为数据会自动分组):

$res = $client->request('GET', "https://api.behance.net/v2/projects",
            ["query" => [
            "q"=>$request->query,
            "client_id" => "hU0hcPkrtXxTi0PH1qUB5jztXI1R7iLB"]],
             ['verify' => 'C:\MAMP\cacert.pem']);

但是...

我希望您的表也有一个主键,如果是这样,此查询将不起作用,因为PIVOT不仅为透视字段($client = new Client(['verify' => 'C:\MAMP\cacert.pem']); )的值创建列,这些列将包含使用值字段(SELECT [Day], [Coke], [Pepsi], [Tango] FROM [TABLE] PIVOT (SUM([Cost]) FOR [Prod] IN ([Coke], [Pepsi], [Tango])) AS PIVOTSALES ),但是FROM子句中指定的所有其他列也进行Prod。因此,如果您的表包含的列多于上述三列CostGROUP BYDay,则必须在FROM子句中指定一个子查询(并为其指定别名): / p>

Prod