1

毎月このクエリを実行するためのヘルプを探しています。

$params = array(&$_POST['query']);

$SQL1 = "SELECT SUM(Income) AS OrderTotal 
FROM SalesDB
WHERE
SalesDB.[Posting Date] <= '2013-01-01' AND
SalesDB.[Posting Date] >= '2013-01-31'";

$options = array("Scrollable" => SQLSRV_CURSOR_KEYSET);
$getProducts1 = sqlsrv_query($conn, $SQL1, $params, $options);
if ($getProducts1 === false)
die( var_dump(sqlsrv_errors()) ); 

while ($row = sqlsrv_fetch_array( $getProducts1, SQLSRV_FETCH_ASSOC)) 
{
$row['OrderTotal'];
}

このようにして、1月の総収入を取得します。ループを実行する方法はありますか?それで、今年の毎月のクエリを実行しますか?

だから私はこの愚かな方法でそれをする必要はありません:

$params = array(&$_POST['query']);

    $SQL1 = "SELECT SUM(Income) AS OrderTotal 
    FROM SalesDB
    WHERE
    SalesDB.[Posting Date] <= '2013-01-01' AND
    SalesDB.[Posting Date] >= '2013-01-31'";

    $options = array("Scrollable" => SQLSRV_CURSOR_KEYSET);
    $getProducts1 = sqlsrv_query($conn, $SQL1, $params, $options);
    if ($getProducts1 === false)
    die( var_dump(sqlsrv_errors()) ); 

$SQL2 = "SELECT SUM(Income) AS OrderTotal 
    FROM SalesDB
    WHERE
    SalesDB.[Posting Date] <= '2013-02-01' AND
    SalesDB.[Posting Date] >= '2013-02-28'";

    $options = array("Scrollable" => SQLSRV_CURSOR_KEYSET);
    $getProducts2 = sqlsrv_query($conn, $SQL2, $params, $options);
    if ($getProducts2 === false)
    die( var_dump(sqlsrv_errors()) ); 

    while ($row1 = sqlsrv_fetch_array( $getProducts1, SQLSRV_FETCH_ASSOC) AND $row2 = sqlsrv_fetch_array( $getProducts2, SQLSRV_FETCH_ASSOC)) 
    {
    echo $row1['OrderTotal'];
echo $row2['OrderTotal'];

    }
4

3 に答える 3

3

を使用する必要がありますGROUP BY。このクエリは、2013 年のすべての収入の合計を日付順に取得します。

$params = array(&$_POST['query']);

$SQL1 = "SELECT SUM(Income) AS OrderTotal
FROM SalesDB
WHERE
YEAR(SalesDB.[Posting Date]) = '2013'
GROUP BY MONTH(SalesDB.[Posting Date])
ORDER BY MONTH(SalesDB.[Posting Date])";

$options = array("Scrollable" => SQLSRV_CURSOR_KEYSET);
$getProducts = sqlsrv_query($conn, $SQL1, $params, $options);
if ($getProducts === false)
die( var_dump(sqlsrv_errors()) );

while ($row = sqlsrv_fetch_array( $getProducts, SQLSRV_FETCH_ASSOC))
{
    echo $row['OrderTotal'];
}

データのない日付0の代わりに表示するには、結果を次のようにします。NULLCOALESCE

$SQL1 = "SELECT COALESCE(0,SUM(Income)) AS OrderTotal
         FROM SalesDB
         WHERE YEAR(SalesDB.[Posting Date]) = '2013'
         GROUP BY MONTH(SalesDB.[Posting Date])
         ORDER BY MONTH(SalesDB.[Posting Date])";
于 2013-03-22T09:49:31.057 に答える
1

私があなたを正しく理解していれば、あなたは月と年でSUM(収入)を取得しようとしていますか?

そして、あなたのフィールドは次のとおりです: SalesDB.[Posting Date] ?

これが私がそれを行う方法です:

$sql = "SELECT SUM(Income) AS OrderTotal, YEAR(alesDB.[Posting Date]) AS year, MONTH(alesDB.[Posting Date]) AS month
FROM SalesDB
GROUP BY YEAR(alesDB.[Posting Date]), MONTH(alesDB.[Posting Date])";
于 2013-03-22T09:49:25.160 に答える
0

レコードを月ごとにグループ化できますMONTH()が、日付の月の値を取得するために使用する必要があります。

SELECT  MONTH(SalesDB.[Posting Date]) MonthNo,
        DATENAME(month, SalesDB.[Posting Date]) MonthName,
        SUM(Income) OrderTotal
FROM    SalesDB
WHERE   SalesDB.[Posting Date] BETWEEN '2013-01-01' AND '2013-12-31'
GROUP   BY  MONTH(SalesDB.[Posting Date]), 
            DATENAME(month, SalesDB.[Posting Date])
ORDER   BY MonthNo ASC
于 2013-03-22T09:49:25.347 に答える