MSSQL回显某些结果


mssql echo certain results

这是我在stackoverflow上的第一篇文章,但我使用过这个网站很多次,所以首先我想感谢你们与世界分享的所有伟大的答案。我使用谷歌和搜索功能之前,我张贴在这里,但我找不到一个解决我的问题的答案。

目标是创建一个google堆叠图,但他们需要一个非常特定的数组格式。在大多数情况下,我设法创建了一个图形,但对于这个图形,我无法获得mssql查询的输出。

查询得到的结果如下

Name       Case       Count
Company A  Incident   6
Company A  Request    28
Company A  Problem    2
Company B  Incident   1
Company B  Problem    15
Company C  Incident   60
Company C  Problem    45
Company C  Request    30
Company C  Change     24
我通过以下简单的SQL查询 实现了这个结果
SELECT top 20
        CRM_MSCRM.dbo.FilteredAccount.name,
        CRM_MSCRM.dbo.FilteredIncident.casetypecodename, 
        count(casetypecodename) as count

        FROM 
             CRM_MSCRM.dbo.FilteredIncident
        JOIN CRM_MSCRM.dbo.FilteredAccount on CRM_MSCRM.dbo.FilteredIncident.bb_accounttocaseid = CRM_MSCRM.dbo.FilteredAccount.accountid
        GROUP BY 
             casetypecodename, name

如果我用PHP在一个相关的PHP列表中回显它,我会得到以下结果:

Company A 6
Company A 28
Company A 2
Company B 1
Company B 15

等等……

但我需要的是以下内容:

Company A 6, 28, 2
Company B 2, 1

我如何回显我的查询(或修改后的查询)以实现我需要的图表格式

    ['Name', 'incident', 'change'],
    ['Company A', 10, 24, ],
    ['Company B', 16, 22, ],
    ['Company C', 28, 19, ]

这是我的PHP代码,只是一个测试页面来获得我的结果。把这个插入图表不是问题,问题是图表所要求的格式。

$sql="
            // query goes here 
                ";
 $stmt = sqlsrv_query( $conn, $sql );
 if( $stmt === false) {die( print_r( sqlsrv_errors(), true) );}
     while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) )
                    {                   
                        echo $row [name];
                        echo $row [tellen]; // but this doesnt work
                    }   
        ?>

我需要如何回应结果来实现我的目标?

Thanks in advance

首先,关于当前代码的一点注意事项:

echo $row [name];

你显然没有配置你的PHP开发框显示所有的错误消息,所以你是盲目编码。我建议你仔细看看,直到你看到你应该得到的两个通知:

    Notice: Use of undefined constant name - assumed 'name'
    Notice: Undefined index: name

我还建议您回顾PHP语法的基础知识,实际上它与受C语法启发的其他语言并没有太大的不同。了解字符串字面值(以及它们与常量的区别),当然还有数组。


虽然您可以重写SQL查询以返回您需要的确切数据格式,但当(如果我正确理解规范)一个简单的PHP数组就可以达到目的时,我认为这是不值得的。

我的印象是唯一的问题是你不熟悉编程语言中数组的概念。这里不是完整讲座的地方,但数组是一个值的列表,顺序很重要,这些值可以是任何PHP变量,包括其他数组。最后一位是转换的关键:

Company A 6
Company A 28
Company A 2
Company B 1
Company B 15

…到这个:

Company A 6, 28, 2
Company B 2, 1

当您在sqlsrv_fetch_array()循环中读取结果集时,您可以将值存储在二维数组中。您可以在PHP手册的递归和多维数组示例中看到语法的作用,但在您的情况下,它应该是:

$values = [];
while ( $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC) ) {
    $values[$row['name']][] = $row['casetypecodename'];
}

你可以用var_dump()检查结果数组。完成后,您可以使用foreach()循环外部数组,并使用implode()将每个内部数组合并为逗号分隔的字符串。