Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 交叉表查询未聚合结果_Sql Server_Tsql_Sql Server 2005_Pivot - Fatal编程技术网

Sql server 交叉表查询未聚合结果

Sql server 交叉表查询未聚合结果,sql-server,tsql,sql-server-2005,pivot,Sql Server,Tsql,Sql Server 2005,Pivot,我正在从fiddle示例创建一个交叉选项卡视图。基本上,我收到了一张包含客户、供应商和产品类型的表格。我想生成一个视图,其中供应商是行,列是按产品类型划分的总销售额 结构是 CustomerID Vendor ProductType -------------------------------- 1 A Type1 2 A Type2 3 B Type1 4

我正在从fiddle示例创建一个交叉选项卡视图。基本上,我收到了一张包含
客户
供应商
产品类型
的表格。我想生成一个视图,其中供应商是行,列是按产品类型划分的总销售额

结构是

CustomerID Vendor ProductType
--------------------------------
1            A       Type1  
2            A       Type2  
3            B       Type1  
4            A       Type2
我想要的最终结果是:

Vendor  Type1   Type2
---------------------
 A        1        2     
 B        1        0

/* Count the number of sales by Product Type for each Vendor. */
DECLARE @cols  AS NVARCHAR(MAX),
        @query AS NVARCHAR(MAX)

select @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(ProductType) 
                from MyTable
        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'')

set @query = 'SELECT Vendor,' + @cols + ' 
        from MyTable
        pivot 
        (
            count (ProductType)
            for ProductType in (' + @cols + ')
        ) p 
    ORDER BY Vendor ASC'
execute(@query)
最终结果是每个供应商都有多行,而不是一行汇总计数

例如

有人知道我在这个问题上遗漏了什么吗


谢谢。

我建议您使用子查询从表中选择所需的列。问题在于,您的数据是按
供应商
客户ID
分组的。
customerId
对于每一行都是不同的,将查询更改为以下内容将得到结果:

DECLARE @cols  AS NVARCHAR(MAX),
        @query AS NVARCHAR(MAX)

select @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(ProductType) 
                from MyTable
        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'')

set @query 
     = 'SELECT Vendor,' + @cols + ' 
        from
        (
          select vendor, producttype
          from MyTable
        ) d
        pivot 
        (
            count (ProductType)
            for ProductType in (' + @cols + ')
        ) p 
    ORDER BY Vendor ASC'

execute(@query);
看。这就产生了一个结果:

| VENDOR | TYPE1 | TYPE2 |
|      A |     1 |     2 |
|      B |     1 |     0 |

你有小提琴的例子吗?或者你能发布你的表格结构和一些样本数据吗?我用样本表格更新了帖子。希望它能澄清正在发生的事情。
| VENDOR | TYPE1 | TYPE2 |
|      A |     1 |     2 |
|      B |     1 |     0 |