2017-10-23 3 views
-1

이 질문에 대해서는 동등한 질문을 찾을 수 없습니다. 죄송합니다. 이것이 반복 인 경우 기본적으로 거래가있는 테이블이 있습니다. 각 트랜잭션에는 코드와 날짜 시간 스탬프가 있습니다. 그 결과이코드별로 날짜별로 같은 행의 부분합을 그룹화하는 방법

+------------+--------+--------+-------+--------+-------+--------+ 
| DATE | CODE1 | COUNT1 | CODE2 | COUNT2 | CODE3 | COUNT3 | 
+------------+--------+--------+-------+--------+-------+--------+ 
| 2017-01-01 | George |  12 | John |  10 | Ringo | 114 | 
+------------+--------+--------+-------+--------+-------+--------+ 

같이 보일 수 있도록 나는 SQL 쿼리를 만들 수 있도록하려면 나는 현재 내가 개별 라인의 합계를 당길 수있는 쿼리, 즉이 :

SELECT CONVERT(mytime AS DATE), code, COUNT(*) FROM transactiontable 
GROUP BY CONVERT(mytime AS DATE), code 
ORDER BY CONVERT(mytime AS DATE), code 

겠습니까을 나는 현재 C에 대해 별도의 테이블이없는 나에게

DATE    CODE  COUNT 
----------------------------------- 
2017-01-01  George  12 
2017-01-01  John  10 

등 ...

을 제공 나는 그것을 고려하고있다.

감사합니다.

+0

있습니까? – GurV

+0

좋은 질문입니다. 100 미만, 아마도 약 50입니다. – jj3pa

+0

CONVERT 함수 데이터 유형 인수가 먼저 없습니다. 변환 (날짜, 시간)? – QHarr

답변

2

.

DECLARE @Table TABLE (DATE DATETIME, CODE VARCHAR(10), [COUNT] INT) 
INSERT INTO @Table 

VALUES 
('2017-01-01','George',12), 
('2017-01-01','John',10) 

;WITH CTE AS 
(
    SELECT RN = ROW_NUMBER() OVER (ORDER BY DATE), * FROM @Table 
) 
SELECT * FROM 
     (SELECT DATE, CONCAT('CODE',RN) RN, CODE Value FROM CTE 
     UNION ALL 
     SELECT DATE, CONCAT('COUNT',RN) RN, CONVERT(VARCHAR,[COUNT]) Value FROM CTE 
     ) SRC 
PIVOT (MAX(Value) FOR RN IN ([CODE1],[COUNT1],[CODE2],[COUNT2])) PVT 

결과 : 코드의 수에 상한이/열을 계산

DATE  CODE1  COUNT1  CODE2 COUNT2 
----------- ----------- ----------- -------- ------- 
2017-01-01 George  12   John  10 
1

당신은 그룹을 형성하고 피벗 조건부 집계를 사용하는 윈도우 함수의 ROW_NUMBER를 사용할 수 있습니다 : 당신은이를 만들기위한 PIVOT을 사용할 수 있습니다

select dt, 
    max(case when rn = 1 then code end) as code_1, 
    max(case when rn = 1 then cnt end) as code_1, 
    max(case when rn = 2 then code end) as code_2, 
    max(case when rn = 2 then cnt end) as code_2, 
    max(case when rn = 3 then code end) as code_3, 
    max(case when rn = 3 then cnt end) as code_3, 
    .... 
from (
    select convert(date, mytime) as dt, 
     code, 
     count(*), 
     row_number() over (partition by convert(date, mytime) order by code) as rn 
    from transactiontable 
    group by convert(date, mytime), code 
    ) t 
group by dt 
order by dt; 
관련 문제