2014-12-26 2 views
0

나는 데이터베이스SQL 쿼리 HELP가 - 출석 아이디

여기

기존의에서 참석 보고서를 얻기 위해 노력하고 있어요에 의해 열과 그룹의 결과로 여러 행에 저장하기 것은 여기

UserID Day   Attendance 
1  2014-12-01 1 
1  2014-12-02 0 
2  2014-12-01 1 
2  2014-12-02 0 
2  2014-12-03 1 

는 데이터베이스의 샘플이다 출력은 난 내가 PIVOT을 사용하여 시도했다

UserID 2014-12-01 2014-12-02 2014-12-03 
1   1    0   null 
2   1    0   1 

얻을 필요하지만 난 열로 여러 행을 얻을 관리 할 수 ​​없습니다

여기

샘플 데이터베이스의 실행 예입니다 : 난 정말 어떤 도움이나 제안을 주셔서 감사합니다 SQL Fiddle

[편집] 내가 MS 액세스 데이터베이스에서이 쿼리를 실행해야

+1

사용중인 데이터베이스에 질문을 태그하십시오. 시도한 쿼리로 질문을 편집하십시오. –

+0

나는 MS 액세스 데이터베이스를 사용하고 있습니다. 에러 쿼리보다는 작동 가능한 솔루션을 얻을 수 없습니다. 바이올린 예제에서 쿼리를 작성했습니다. –

답변

0

당신은 할 수 피벗을 사용하여 임시 테이블을 사용하십시오. 여기서 열은 원본 테이블의 '요일'열에서 고유 한 값입니다. 임시 테이블이 있으면 쿼리를 작성하여 원본 테이블의 데이터로 채울 수 있습니다.

+0

다이내믹 파트를위한 임시 테이블을 만드는 것이 맞습니까? 어떤 모범이 있습니까? 감사합니다 ... –

+0

이러한 링크 확인 --------- https://social.msdn.microsoft.com/Forums/sqlserver/en-US/a642017b-0ee0-4f04-8022-27fc49696493/pivot-table -saving-it-after-creation-into-into-select-into? forum = transactsql --------------------- http : // stackoverflow .com/q/778079/3394346 --------------------- https://social.msdn.microsoft.com/Forums/sqlserver/en-US/7d67adc5-6f91-4639-98d6-513db4322096/dynmic-pivot-query에서 column-name-of-column-unknown 테이블에 insert-in-table? forum = transactsql – Xion

1

SQL Pivot을 사용하면됩니다. Temp 테이블을 사용하여 월 단위로 일을 생성하고 Columns를 생성 한 다음이 열을 Pivot에서 사용하고 일별로 Convert를 사용하여 열을 일치시킬 수 있습니다. 하루를 변환하지 않고도 날짜를 사용할 수 있습니다. 약간의 변경이 필요할 것입니다. 동적 컬럼을 생성 할 수있는 날짜는 현재 임시 테이블을 사용하지 않는 것입니다. STUFF SELECT 문에서 현재 테이블을 사용하고 날짜 컬럼을 가져옵니다. 그러나 그것이 당신을 도울 것이라는 점을 희망하십시오.

DECLARE @cols AS NVARCHAR(MAX), 
@query AS NVARCHAR(MAX) 
DECLARE @TempAttendanceMonth table(C_Date int) 
DECLARE @cnt INT = 1; 
WHILE @cnt <= 30 
    BEGIN 
    insert into @TempAttendanceMonth (C_Date) values (@cnt) 
    SET @cnt = @cnt + 1; 
    END; 
select @cols = STUFF((SELECT ',' + QUOTENAME(C_Date) 
from @TempAttendanceMonth 
     FOR XML PATH(''), TYPE 
     ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'') 
set @query 
    = 'SELECT StudentId,' + @cols + ' 
from 
    (
     select StudentId, day(CurrentDate)CurrentDate, IsPresent 
from StudentAttendance 
    ) src 
    pivot 
    (
     sum(IsPresent) 
     for CurrentDate in (' + @cols + ') 
    )piv ' 
execute(@query)