2017-09-05 10 views
0

私はピンチで作業しているこのクエリを持っていますが、より良いものにする必要があります。私はsqlsrvを学んでいて、時代遅れのものに苦労しています。SQLサーバー文で時間変数を追加してグループ化します

基本的には、すべての固有の到着(schtm + duration)を取得し、1時間あたりの予想数を表示する必要があります。誰かが私を正しい方向に向けることができますか?

このクエリでは、5:30、5:45、6:00、6:15などのすべてのユニークな時間が表示されます。私は時間単位でグループ化する必要があるので、5-6-7-8などを表示します。その下の数

<?PHP 
$currentdate = date('mdy'); 
    $this_time = date ("D, M j, Y H:i"); 
    $current_date = date('n-d-y'); 
    $this_time = date ("M j, Y H:i"); 

    echo"<table width=\"100%\" border=\"1\"><tr>"; 
$sql = "SELECT DISTINCT cast(cast(SCHTM as datetime)+cast(DURATION as datetime) as time) as Arrivals FROM admissions.patientinfo WHERE SCHDT ='$currentdate' GROUP BY cast(cast(SCHTM as datetime)+cast(DURATION as datetime) as time)"; 

     $stmt = sqlsrv_query($conn, $sql); 

     while($row = sqlsrv_fetch_array($stmt , SQLSRV_FETCH_ASSOC)) { 
      $Arrivals=$row['Arrivals']->format('H:i'); 

      echo"<td align=\"center\">$Arrivals "; 
     $sql = "SELECT DISTINCT PATNUM as Count FROM admissions.patientinfo WHERE SCHDT ='$currentdate' AND cast(cast(SCHTM as datetime)+cast(DURATION as datetime) as time) = '$Arrivals:00' "; 
      $query = sqlsrv_query($conn, $sql, array(), array("Scrollable" => 'static')); 

$row_count = sqlsrv_num_rows($query); 

      echo"<br />$row_count</td>"; 
     } 

    echo"</tr></table>" 
?> 
+0

SCHTMとDURATIONはdatetimesとして保存されていませんか?ここで鋳造する必要はありますか? – Simon

+0

これらは両方とも時間(0)フィールドです。キャスティングは私がそれを働かせる唯一の方法です。 –

答えて

0
$sql = "WITH CTE1 
     AS 
     (SELECT DATEADD(HOUR, DATEPART(HOUR, CAST(SCHTM AS DATETIME)), 
     DATEPART(HOUR, CAST(DURATION AS DATETIME))) AS Arrivals FROM 
     admissions.patientinfo WHERE SCHDT ='$currentdate') 
     SELECT CONVERT(VARCHAR(8), Arrivals, 108) FROM CTE1 
     GROUP BY Arrivals"; 

このクエリは、DATETIMEとしてSCHTMと持続時間の両方をキャスト彼らの時間を追加して、列到着として印刷されます必要があります。私はそれをCTEに入れてTIMEとGROUPを適切に表示します。

+0

私はCTE1に従っていません - どのようにCTE1を取得しますか?私はこれをSQLとして入れて、すべてを壊します。 –

+0

これは私が持っているものです。私は私のページに結果が得られません。クエリをサーバーに直接置くと結果が得られます。 $ sql admitted.patientinfo WHERE SCHDT = '$ currentdateからの到着時に、$ sql = "CTE1を使用して(日付、時刻(時刻、時刻、時刻など)、日付、時刻) ') SELECT CONVERT(VARCHAR(8)、Arrivals、108)CTE1から GROUP BY Arrivals "; \t \t $ stmt = sqlsrv_query($ conn、$ sql); \t \t \t \t \t \t echo " $ Arrivals "; \t \tながら($行= sqlsrv_fetch_array($ STMT、SQLSRV_FETCH_ASSOC)){ \t \t \t $到着= $行[ '到着']。 –

関連する問題