在SQL中计算if或Count的位置

时间:2013-12-19 18:45:20

标签: sql ms-access

我有一份合同数据和工作人员的国籍。样品如下。

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

我在Access 2010中工作。是否有一个countif或一些等价物可以让我根据条件计算值?

3 个答案:

答案 0 :(得分:3)

您希望同时使用GROUP BY和GROUP来使用GROUP BY。这将给你一个这样的列表:

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

然后您想要旋转这些值以使其成为您想要的格式。 0仍然会丢失......

答案 1 :(得分:0)

PIVOT会起作用,它有点复杂但是原始的sql你可以GROUP BY,例如:

SELECT Contract,Country,COUNT(*)
来自[YourTable]
GROUP BY合同,国家
按国家订购

答案 2 :(得分: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;


核心查询

  SELECT * from
  (SELECT   [Contract]
     ,[Country]
   FROM [TEST_DB].[dbo].[Contract]
  ) sT
    pivot 
        (
            Count([Country])
            for [Country] in ([DE],[US],[GB])
        ) p