2013-12-19 2 views
4

У меня есть набор данных контрактов и национальностей людей, работающих на них. Образец следующий.Подсчитайте if или Count, где в SQL

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. Есть СЧЕТЕСЛИ или какой-то эквивалент, который позволит мне рассчитывать значения, основанные на условиях?

+2

Это называется * Pivot *. Вам должно быть проще найти ответ, когда вы знаете, как называется то, что вы ищете. – 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; 


The основного запроса

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 

Затем вы хотите, чтобы повернуть эти значения, чтобы получить его в формат, который вы хотите. В 0s будет по-прежнему не хватает ...

0

ОСИ будет работать, это немного сложнее, но так сырая SQL вы могли GROUP BY, например:

ВЫБРАТЬ Контракт, Страна, COUNT (*) FROM
[YourTable]
ГРУППА по контракту, Страна
ORDER BY Country

Смежные вопросы