我有一份合同数据和工作人员的国籍。样品如下。
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或一些等价物可以让我根据条件计算值?
答案 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