2017-02-14 1 views
0

USER_KEY에 의한 여러 결과에 문제가 있습니다. 사용자별로 부서별 시간을 요약해야합니다. 따라서 각 사용자는 특정 부서에서 특정 시간을 보냈습니다.피봇 테이블에서 그룹화

반복되는 사용자를 제외하고 모든 것이 멋지다. 쿼리에서 group by을 수행해야하지만 성공하지 못했습니다. 여기 group by을 만드는 방법을 알고하지 않습니다

SELECT @QUERY = 'SELECT DISTINCT USER_KEY, ' + @COLDEPARTMENTS + ' 
FROM CAUSDE_TAS 
PIVOT 
(
SUM(USDE_HSU) 
FOR DEPA_KEY IN (' + @COLDEPARTMENTS + ') 
) PIVOT_LOCATIONS 
WHERE USDE_DAT >= ''' + format(@DATEFROM, 'MM.dd.yyyy') + ''' AND USDE_DAT <= ''' + format(@DATETO, 'MM.dd.yyyy') + ''' 
AND USER_KEY IN (' + @USERS_STR + ')' 

:

DECLARE @DATEFROM DATETIME = DATEADD(DAY, -14, GETDATE()) 
DECLARE @DATETO DATETIME = DATEADD(DAY, -12, GETDATE()) 

DECLARE @COLDEPARTMENTS NVARCHAR(MAX) 
SELECT @COLDEPARTMENTS = STUFF((SELECT DISTINCT ',' + QUOTENAME(DEPA_KEY, '[') FROM CADEPA FOR XML PATH('')), 1, 1, '') 
--SELECT @COLDEPARTMENTS 

DECLARE @QUERY AS NVARCHAR(MAX) 

DECLARE @USERS TABLE 
(
    USER_KEY INT, 
    USDE_HSU DECIMAL(8,2) 
) 

DECLARE @USERS_STR NVARCHAR(MAX) 

INSERT INTO @USERS (USER_KEY, USDE_HSU) 
SELECT USERS_.USER_KEY, SUMMARY FROM (
SELECT DISTINCT USER_KEY, SUM(USDE_HSU) SUMMARY 
FROM CAUSDE_TAS 
WHERE USDE_DAT >= @DATEFROM AND USDE_DAT <= @DATETO 
GROUP BY USER_KEY 
HAVING SUM(USDE_HSU) IS NOT NULL AND SUM(USDE_HSU) > 0) USERS_ 

SELECT @USERS_STR = STUFF((SELECT DISTINCT ',' + CAST(USER_KEY AS NVARCHAR(9)) FROM @USERS FOR XML PATH('')), 1, 1, '') 

SELECT @QUERY = 'SELECT DISTINCT USER_KEY, ' + @COLDEPARTMENTS + ' 
FROM CAUSDE_TAS 
PIVOT 
(
SUM(USDE_HSU) 
FOR DEPA_KEY IN (' + @COLDEPARTMENTS + ') 
) PIVOT_LOCATIONS 
WHERE USDE_DAT >= ''' + format(@DATEFROM, 'MM.dd.yyyy') + ''' AND USDE_DAT <= ''' + format(@DATETO, 'MM.dd.yyyy') + ''' 
AND USER_KEY IN (' + @USERS_STR + ')' 

EXECUTE (@QUERY) 

문제가 쿼리의 마지막 부분입니다 : 여기

쿼리입니까? 나는 무엇을 시도했다

enter image description here

여기 GROUP BY을 추가하는 것입니다 :

결과는 다음과 같이 있습니다

SELECT @QUERY = 'SELECT DISTINCT USER_KEY, ' + @COLDEPARTMENTS + ' 
FROM CAUSDE_TAS 
PIVOT 
(
SUM(USDE_HSU) 
FOR DEPA_KEY IN (' + @COLDEPARTMENTS + ') 
) PIVOT_LOCATIONS 
WHERE USDE_DAT >= ''' + format(@DATEFROM, 'MM.dd.yyyy') + ''' AND USDE_DAT <= ''' + format(@DATETO, 'MM.dd.yyyy') + ''' 
AND USER_KEY IN (' + @USERS_STR + ') 
GROUP BY USER_KEY' 

을하지만 오류는 다음과 같습니다

열 'PIVOT_LOCATIONS .110000003 '은 (는) 선택 목록 에서 유효하지 않습니다. 집계 함수 또는 GROUP BY 절에 포함됩니다.

업데이트 : 내가 말 group by user_key, ' + @COLDEPARTMENTS 추가했지만, USER_KEY 여전히 복제됩니다. 사람 당신이 돈에 의해서만 그룹에 의해 그룹에 모든 열을

SELECT DISTINCT USER_KEY, [110000003],[120000002],[120000003],[120000004],[120000005],[120000006],[120000007],[120000008],[120000009],[120000010],[120000011],[120000012],[120000013],[120000015],[120000016],[120000017],[120000021],[120000022],[120000023],[120000025],[120000026],[120000027],[120000028],[120000029],[120000030],[120000039],[120000040],[120000042],[120000043],[120000044],[120000045],[120000046],[120000047],[120000048],[120000049],[120000050],[120000051],[130000001],[130000002],[130000003],[130000004],[130000005],[130000006],[130000007],[140000001],[140000002],[140000003],[140000004],[140000005],[140000006],[140000007],[140000008],[140000009],[140000010],[140000011],[140000012],[140000013],[140000014],[140000015],[140000016],[140000017],[140000018],[150000001],[150000002],[150000003],[150000004],[150000005],[150000006],[150000007],[150000008],[150000009],[150000010],[150000011],[150000012],[160000001],[160000002],[160000003],[160000004],[160000005] 
FROM CAUSDE_TAS 
PIVOT 
(
SUM(USDE_HSU) 
FOR DEPA_KEY IN ([110000003],[120000002],[120000003],[120000004],[120000005],[120000006],[120000007],[120000008],[120000009],[120000010],[120000011],[120000012],[120000013],[120000015],[120000016],[120000017],[120000021],[120000022],[120000023],[120000025],[120000026],[120000027],[120000028],[120000029],[120000030],[120000039],[120000040],[120000042],[120000043],[120000044],[120000045],[120000046],[120000047],[120000048],[120000049],[120000050],[120000051],[130000001],[130000002],[130000003],[130000004],[130000005],[130000006],[130000007],[140000001],[140000002],[140000003],[140000004],[140000005],[140000006],[140000007],[140000008],[140000009],[140000010],[140000011],[140000012],[140000013],[140000014],[140000015],[140000016],[140000017],[140000018],[150000001],[150000002],[150000003],[150000004],[150000005],[150000006],[150000007],[150000008],[150000009],[150000010],[150000011],[150000012],[160000001],[160000002],[160000003],[160000004],[160000005]) 
) PIVOT_LOCATIONS 
WHERE USDE_DAT >= '01.31.2017' AND USDE_DAT <= '02.02.2017' 
AND USER_KEY IN (100000002,100000008,100000013,100000014,100000042,100000043,100000052,100000066,110000025,110000030,110000057,120000030,120000033,120000037,120000039,120000052,120000064,130000007,130000017,130000021,130000033,130000041,130000069,130000073,130000096,130000109,130000115,140000031,140000054,140000066,140000073,140000074,150000018,150000019,150000023,150000024,150000045,150000067,150000072,150000095,150000101,150000102,150000115,150000205,150000215,150000281,160000012,160000057,160000058,160000071,160000078,160000107,160000109,160000145,160000146,160000151,160000181,160000182,160000192,160000204,160000220,170000001,170000006,170000008) 
group by user_key, [110000003],[120000002],[120000003],[120000004],[120000005],[120000006],[120000007],[120000008],[120000009],[120000010],[120000011],[120000012],[120000013],[120000015],[120000016],[120000017],[120000021],[120000022],[120000023],[120000025],[120000026],[120000027],[120000028],[120000029],[120000030],[120000039],[120000040],[120000042],[120000043],[120000044],[120000045],[120000046],[120000047],[120000048],[120000049],[120000050],[120000051],[130000001],[130000002],[130000003],[130000004],[130000005],[130000006],[130000007],[140000001],[140000002],[140000003],[140000004],[140000005],[140000006],[140000007],[140000008],[140000009],[140000010],[140000011],[140000012],[140000013],[140000014],[140000015],[140000016],[140000017],[140000018],[150000001],[150000002],[150000003],[150000004],[150000005],[150000006],[150000007],[150000008],[150000009],[150000010],[150000011],[150000012],[160000001],[160000002],[160000003],[160000004],[160000005] 
+0

어떤 시도를 하셨으며 어떤 오류가 발생 했습니까? –

+0

질문이 업데이트되었습니다. – FrenkyB

+0

오류 메시지는'@ COLDEPARTMENTS'를 빌드 할 때'GROUP BY'가 작동하도록 집계 함수에 열 이름을 넣어야한다고 알려줍니다. –

답변

1

대신 추가 :

여기

는 말에 group by를 추가 한 후 쿼리 모습입니다 (오류,하지만 결과는 좋지 않습니다) 나머지는 집계하십시오. 나머지는 집계하십시오. 다음과 같은 내용 :

SELECT USER_KEY, SUM(col1), SUM(col2), ... SUM(colN) 
FROM {all the stuff in the middle} 
GROUP BY USER_KEY 
+0

이 작품은 ... 비록 내가 명확하게 이해하지 못하는 방법 : – FrenkyB

+0

구글과 'SQL 그룹 BY'에 대한 자습서를 통해 이동하십시오. 많은 상세한 설명이 나와 있습니다. –

관련 문제