2014-07-15 2 views
1

사용자가 단일 장치 또는 '실행'단위에 대해 시간을 입력 할 수있는 시간 카드 시스템에서 작업하고 있습니다.고유 한 열 값을 선택하고 다른 열의 관련 값을 추가하십시오.

사용자가 '실행'에 대해 시간을 입력 할 수있는 시간 입력 부분을 이미 생성했으며 '실행'의 일부로 지정된 각 단위에 대해 별도의 행을 생성합니다. 또한 입력 한 시간을 나눕니다 (즉, run15는 8 시간을 가졌기 때문에 각 장치는 4 시간을받습니다) 시간이 한 단위에 대해 입력 된 경우 RunNum은 공백으로 남습니다.

UnitNum RunNum  Hours    Date 
---  ----   ------   -------- 
1   12   5    08-01-2013 
2   12   5    08-01-2013 
3   12   5    08-01-2013 
4   -   10    08-02-2013 
5   -    8    08-02-2013 
6   -    4    08-03-2013 
9   15   4    08-03-2013 
9   15   4    08-03-2013 
1   12   1.5    08-04-2013 
2   12   1.5    08-04-2013 
3   12   1.5    08-04-2013 

이제 시스템의 편집 부분으로 이동합니다. 상황은 좀 더 복잡합니다. 사용자는 실행중인 개별 단위를 편집하지 않아도되므로 단일 실행으로 다시 표시하고 싶습니다.

별개의 실행을 결합해야합니다. 날짜가 같은 해당 시간을 추가하십시오. 지금까지, 내 ​​코드가 모든 것을 잡고 다음과 같습니다

UnitNum RunNum  Hours    Date 
---  ----   ------   -------- 
-   12   15    08-01-2013 
4   -   10    08-02-2013 
5   -    8    08-02-2013 
6   -    4    08-03-2013 
-   15   8    08-03-2013 
-   12   4.5    08-04-2013 

가 :

Select runNum, date, sum(hours) as hours 
from dbo.TimeCardHours 
Group by runNum, date 
order by Date 

답변

0

: 당신이 찾고있는 것처럼 소리

<?PHP 
$EditPickSelect = SQLSRV_QUERY($conn1,"SELECT runnum, unitnum, date, hours FROM dbo.TimecardHours ORDER BY date"); 
ECHO "<br>"; 
ECHO "<table border='1'>"; 

ECHO "<tr>"; 

ECHO "<td>"; 
    ECHO "Run"; 
ECHO "</td>"; 

ECHO "<td>"; 
    ECHO "Unit"; 
ECHO "</td>"; 

ECHO "<td>"; 
    ECHO "Hours"; 
ECHO "</td>"; 

ECHO "<td>"; 
    ECHO "Date"; 
ECHO "</td>"; 

ECHO "</tr>"; 


WHILE ($EditPickFetch=SQLSRV_FETCH_ARRAY($EditPickSelect, SQLSRV_FETCH_ASSOC)) 
{ 

ECHO "<tr>"; 

    ECHO "<td>"; 
    ECHO "<center>"; 
     if ($EditPickFetch['runnum'] == '') { 
     ECHO "-"; 
     } else { 
     ECHO $EditPickFetch['runnum']; 
     } 
    ECHO "</center>"; 
    ECHO "</td>"; 

    ECHO "<td>"; 
    ECHO "<center>"; 
     if ($EditPickFetch['unitnum'] == '') { 
     ECHO "-"; 
     } else { 
     ECHO $EditPickFetch['unitnum']; 
     } 
    ECHO "</center>"; 
    ECHO "</td>"; 

    ECHO "<td>"; 
    ECHO "<center>"; 
     ECHO $EditPickFetch['hours']; 
    ECHO "</center>"; 
    ECHO "</td>"; 

    ECHO "<td>"; 
    ECHO "<center>"; 
     ECHO $EditPickFetch['date']; 
    ECHO "</center>"; 
    ECHO "</td>"; 

ECHO "</tr>"; 

} 

ECHO "</table>"; 
?> 
+0

이것은 매우 가깝습니다. Dbloch; 그러나 Unitnum에 Runnum이 없는지 보여 주도록하겠습니다. 별도로 Runnum이없는 Units를 처리하는 select 문이이를 나타낼 수 있습니다. 하지만 조합 선택시 실행 선택이 작동 단위를 무시해야하기 때문에 중단됩니다. – Putty

+0

select 문을 편집했습니다. 귀하가 요구하는 내용입니다. – Dbloch

+0

그게 핵심입니다. 노동 조합이 작동하기 위해서는 select 문 양쪽에 열이 있어야합니다. 하나의 select 문에 존재할 수 없기 때문에 열을 NULL로 선택하십시오. – Putty

0

단지 집계를 할 수와 unitnum을 숨기 이것은 당신을 위해 작동해야합니다.

SELECT NULL AS UnitNum, [Runnum], SUM([Hours]), [Date] 
FROM [Dbo].Timecardhours 
WHERE Runnum IS NOT NULL 
GROUP BY Date, 
    Runnum 
UNION ALL 
SELECT UnitNum, [Runnum], SUM([Hours]), [Date] 
FROM [Dbo].Timecardhours 
WHERE Runnum IS NULL 
GROUP BY Date, 
    Runnum, 
    Unitnum; 
관련 문제