Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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
PHP MSSQL:查询不返回行时如何显示输出_Php_Sql Server - Fatal编程技术网

PHP MSSQL:查询不返回行时如何显示输出

PHP MSSQL:查询不返回行时如何显示输出,php,sql-server,Php,Sql Server,我的PHP-MSSQL查询有问题。 我有一个连接表,需要给出如下结果: Department Group A Group B Total A+B WORKHOUR A OTHOUR A WORKHOUR B OTHOUR B WORKHOUR OTHOUR HR 10 15 25 0 35

我的PHP-MSSQL查询有问题。 我有一个连接表,需要给出如下结果:

    Department        Group A              Group B           Total A+B
                 WORKHOUR A OTHOUR A    WORKHOUR B OTHOUR B      WORKHOUR  OTHOUR
    HR             10         15     25   0               35       15
    IT              5          5                               5        5
    Admin                                    12   12              12       12
查询将根据给定的日期计算有多少员工(管理员将输入数据,一旦提交,查询将给出上述结果)

问题是,当没有要显示的行时,最终输出是一团乱。该列被向右移动

i、 e: 只有A组 管理中只有B组

Department        Group A              Group B           Total A+B
             WORKHOUR A OTHOUR A WORKHOUR B OTHOUR B      WORKHOUR  OTHOUR
HR      10       15       25     0               35      15
IT       5        5        5         5
Admin   12       12       12        12
我的问题是,如何防止这种情况发生? 我什么都试过了。。。。如果不是。。但结果仍然是一样的。 如果没有要返回的行,如何显示输出“0”? 回声“0”

这是我的疑问:

    select DD.DPT_ID,DPT.DEPARTMENT_NAME,TU.EMP_GROUP, sum(DD.WORK_HOUR) AS  WORK_HOUR,      
    sum(DD.OT_HOUR) AS OT_HOUR
    FROM DEPARTMENT_DETAIL DD
    left join DEPARTMENT DPT
    ON (DD.DEPT_ID=DPT.DEPT_ID)
    LEFT JOIN TBL_USERS TU
    ON (TU.EMP_ID=DD.EMP_ID) 
    WHERE DD_DATE>='2012-01-01'
    AND DD_DATE<='2012-01-31'
    AND TU.EMP_GROUP!=2
    GROUP BY DD.DEPT_ID, DPT.DEPARTMENT_NAME,TU.EMP_GROUP
    ORDER BY DPT.DEPARTMENT_NAME
选择DD.DPT\u ID、DPT.DEPARTMENT\u NAME、TU.EMP\u GROUP、sum(DD.WORK\u HOUR)作为工时,
总计(日加班小时)为加班小时
来自部门详细信息DD
左连接部DPT
打开(DD.DEPT\u ID=DPT.DEPT\u ID)
左连接TBL_用户TU
ON(TU.EMP\u ID=DD.EMP\u ID)
其中DD_日期>='2012-01-01'

我希望我没有误解你的问题。缺少一些行的原因是,在某些情况下甚至没有得到任何tup

例如,如果我有一个简单的表t1(key1-varchar(200),key2-varchar(200),val-integer), 我编写了一个查询,比如
selectkey1,key2,sum(val),通过key1,key2从t1组中选择

假设值为-

apple week1 4
apple week2 5
pear  week1 3
pear  week1 3
apple week2 3
apple week2 4
apple week1 5
通过这个查询,我永远不会得到(pear,week2)=>这样的值

类似地,您甚至可能不会触发条件检查,如
(!$row[“WORK_HOUR”])&(!$row[“OT_HOUR”])

我希望下面的代码会有所帮助

$results = array();

$allDepts = array();
$allGroups = array();

while($row = mssql_fetch_array($displayResult))
{
    $deptId = $row['DPT_ID'];
    $deptName = $row['DEPARTMENT_NAME'];
    $group = $row['EMP_GROUP'];
    $workHours = $row['WORK_HOUR'];
    $otHours = $row['OT_HOUR'];

    // set up a thorough list of depts & groups
    $allDepts[$deptId] = $deptName;
    $allGroups[$group] = $group;

    // store the values of hours
    $results[$deptId][$group]['work'] = $workHours;
    $results[$deptId][$group]['ot'] = $otHours;
}

// go through all possible combination of (dept, groups)
foreach($allDepts as $deptId => $deptName) {
    echo "<tr><td>$deptName</td>\n";
    foreach($allGroups as $group) {
        $workHours = $results[$deptId][$group]['work'];
        printTd($workHours);
        $otHours = $results[$deptId][$group]['ot'];
        printTd($otHours);
    }
    echo "</tr>\n";
}

function printTd( $value ) {
    $value = $value ? $value:"empty";
    echo "<td>$value</td>\n";
}
$results=array();
$allDepts=array();
$allGroups=array();
而($row=mssql\U fetch\U数组($displayResult))
{
$deptId=$row['DPT_ID'];
$deptName=$row['DEPARTMENT_NAME'];
$group=$row['EMP_group'];
$workHours=$row['WORK_hours'];
$otHours=$row['otu HOUR'];
//建立部门和小组的详细清单
$allDepts[$deptId]=$deptName;
$allGroups[$group]=$group;
//存储小时值
$results[$deptId][$group]['work']=$workHours;
$results[$deptId][$group]['ot']=$otHours;
}
//检查所有可能的组合(部门、组)
foreach($depts为$deptId=>$deptName){
回显“$deptName\n”;
foreach($all groups作为$group){
$workHours=$results[$deptId][$group]['work'];
printTd(工作时间);
$otHours=$results[$deptId][$group]['ot'];
打印TD(其他小时);
}
回音“\n”;
}
函数printTd($value){
$value=$value?$value:“空”;
回显“$value\n”;
}

phew。最后,使用@LiangLiang Zheng answer,我可以得到最终的总计以及每行(视图中的行)的工时和加班时间。(说真的,我只知道简单的基本PHP,不知道如何使用数组等等,所以我只会编写我所知道的代码)

我现在唯一需要做的就是显示每列的总计: A组总工时、A组总加班工时、B组总工时、B组总加班工时。(有人能帮我吗?)

无论如何,这里是我如何得到每行/每行的总工作时间和加班时间,以及工作时间和加班时间的最终总计(显示在表格底部):


全部的

php代码是什么?这是php逻辑的问题吗?我写了一个答案来解决SQL中的一个问题,因为您只粘贴了SQL代码。但是您的问题是一个PHP/标记问题!如果没有您用来生成输出的代码,我们无法修复这个问题!您还可以使用SELECT IFNULL(my_列,0),如果列的结果为null@raheelshan这是我最初的答案,但因为这是一个演示文稿问题,所以我将其删除。@梁良正:我已经添加了上面的php代码。它不起作用。请帮忙,这太好了。但是如何计算总数呢?我需要计算每行(部门)的总工时、总加班时间(在最右边的列),然后在每列的底部返回总工时。(我对数组不太熟悉)您可以分配一个新数组$totals[$deptName]['work'或'ot',并将$workHours和$otHours添加到此数组中。如果不清楚,请告诉我好的。当然不清楚。我能够在表格底部计算工作小时和加班小时的最终总计,但我仍然不知道如何按每行显示总计。(A组和B组总工时),(A组和B组加班总工时)1。这真是对试图帮助你的人的侮辱。你不应该仅仅抓住答案&大部分代码,然后创建自己的答案。如果你试图回答自己的问题,至少要确保它是清楚和正确的。e、 g.“$Tsu hour”到底是什么?@梁梁梁正,对不起,但我确实放了“使用梁梁梁正答案”。实际上,这是工作时间,不是课时。很抱歉我的错。
apple week1 4
apple week2 5
pear  week1 3
pear  week1 3
apple week2 3
apple week2 4
apple week1 5
$results = array();

$allDepts = array();
$allGroups = array();

while($row = mssql_fetch_array($displayResult))
{
    $deptId = $row['DPT_ID'];
    $deptName = $row['DEPARTMENT_NAME'];
    $group = $row['EMP_GROUP'];
    $workHours = $row['WORK_HOUR'];
    $otHours = $row['OT_HOUR'];

    // set up a thorough list of depts & groups
    $allDepts[$deptId] = $deptName;
    $allGroups[$group] = $group;

    // store the values of hours
    $results[$deptId][$group]['work'] = $workHours;
    $results[$deptId][$group]['ot'] = $otHours;
}

// go through all possible combination of (dept, groups)
foreach($allDepts as $deptId => $deptName) {
    echo "<tr><td>$deptName</td>\n";
    foreach($allGroups as $group) {
        $workHours = $results[$deptId][$group]['work'];
        printTd($workHours);
        $otHours = $results[$deptId][$group]['ot'];
        printTd($otHours);
    }
    echo "</tr>\n";
}

function printTd( $value ) {
    $value = $value ? $value:"empty";
    echo "<td>$value</td>\n";
}
    <?php

    $total_workhours=0;
    $total_ot=0;
    // go through all possible combination of (dept, groups)
    foreach($allDepts as $deptId => $deptName) {

    $dept_workhour=0;
$dept_ot=0;

    echo "<tr><td>$deptName</td>\n";

    foreach($allGroups as $group) 
{
    $workHours = $results[$deptId][$group]['work'];
    printTd($workHours);
    $otHours = $results[$deptId][$group]['ot'];
    printTd($otHours);

    $total_workhours+=$workHours;
    $total_ot+=$ot_hour;

            $dept_workhour +=$workHours;
    $dept_ot +=$ot_hour;

    }

echo "<td> $dept_workhour</td>\n";
echo "<td>$dept_ot</td>\n";
    echo "</tr>\n";
    }
    ?>
    <tr align="center">
    <td>TOTAL</td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td ><?php echo $total_workhours; ?></td>
    <td><?php echo $total_ot; ?></td>
    </tr>

    <?php
    function printTd( $value ) {
    $value = $value ? $value:"empty";
    echo "<td>$value</td>\n";
    }