2013-12-19 3 views
4

계약서의 데이터 세트와 이에 대해 작업하는 사람들의 국적을 가졌습니다. 샘플은 다음과 같습니다.SQL에서 count 또는 if Count를 계산하십시오.

Contract Country 
GTT001 DE 
GTT001 DE 
GTT001 US 
BFF333 US 
BFF333 US 
BFF333 DE 
HHH222 GB 
HHH222 GB 
HHH222 GB 

각 국가의 각 계약서를 작성하는 사람의 수를 계산하는 쿼리가 필요합니다. 그래서 아래 표와 같이 생성합니다 하나

  DE US GB 
GTT001 2 1  0 
BFF333 1 2  0 
HHH222 0 0  3 

을 내가 액세스 2010하고 있어요는 COUNTIF 또는 나 조건에 따라 값을 계산 할 수 있도록 몇 가지 상당이 있습니까?

+2

* 피벗 *이라고합니다. 찾고있는 것이 어떻게 호출되는지 알고있을 때 대답을 찾는 것이 더 쉬울 것입니다. – MarcinJuraszek

답변

0
DECLARE @Pivotcols AS NVARCHAR(MAX), 
     @query AS NVARCHAR(MAX) 
     select @Pivotcols = STUFF((SELECT distinct N',' + QUOTENAME([Country]) 
       from [Contract] 
     FOR XML PATH(''), TYPE 
     ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'') 

    select @Pivotcols 

    set @query = N'SELECT [Contract], ' + @Pivotcols + N' 
     from 
     (
      SELECT [Contract] 
    ,[Country] 
    FROM [TEST_DB].[dbo].[Contract] 

     ) sourceTable 
     pivot 
     (
      Count([Country]) 
      for [Country] in (' + @Pivotcols + N') 
     ) p ' 

    execute sp_executesql @query; 


핵심 쿼리

BY 계약
GROUP, 나라
ORDER
SELECT * from 
    (SELECT [Contract] 
    ,[Country] 
    FROM [TEST_DB].[dbo].[Contract] 
) sT 
    pivot 
     (
      Count([Country]) 
      for [Country] in ([DE],[US],[GB]) 
     ) p 
3

계약서와 국가를 모두 사용하여 GROUP BY를 사용하려고합니다. 이렇게하면 다음과 같은 목록이 표시됩니다.

Contract Country Count 
GTT001 DE  2 
GTT001 US  1 
BFF333 US  2 
BFF333 DE  1 
HHH222 GB  3 

그런 다음 원하는 값으로 피벗시키고 싶습니다. 0 여전히

0

PIVOT이 작동합니다 ... 누락됩니다, 그것은 조금 더 복잡하지만입니다 그래서 원시 SQL 그럴 수 GROUP BY, 예를 들어 :

SELECT 계약, 국가, COUNT (*)
FROM [YourTable] 나라

관련 문제