2013-05-13 6 views
2

У меня есть таблица в Access, из которой я хочу создать запрос. Я хочу, чтобы подсчитать, сколько раз значение 1 место в 1-й колонке, сколько раз дорожим 2 место в 2-й колонке и т.д.Подсчет и сумма значений в таблице

ID Col1 Col2 Col3 Col4 
------------------------------- 
172 1 2 4 3 
172 3 2 4 1 
173 2 3 5 4 
173 2 1 3 4 

Выход (Количество значений вхождений):

   1 2 3 4 5 6 7 8 
      ------------------------------ 
172 1st  1 0 1 0 0 0 0 0 
172 2nd  0 2 0 0 0 0 0 0 
172 3rd  0 0 0 2 0 0 0 0 
172 4th  1 0 1 0 0 0 0 0 
173 1st  0 2 0 0 0 0 0 0 
173 2nd  1 0 1 0 0 0 0 0 
173 3rd  0 0 1 1 1 0 0 0 
173 4th  0 0 0 1 0 0 0 0 
Total Count 3 2 4 3 1 0 0 0 
+0

Это кажется, что это было бы более целесообразно делать на языке программирования, работая на двумерном массиве – Patashu

+0

'Pivot' и' Transform' являются вашими друзьями – Yaroslav

ответ

0

Поскольку вы используете MS-Access, можно использовать запрос следующим образом:

TRANSFORM Count([s].[ID]) AS Counts 
SELECT [s].ID, [s].[tbl] 
FROM (
    SELECT ID, '1st' AS tbl, [1st] AS Val FROM yourtable 
    UNION ALL SELECT ID, '2st' AS tbl, [2nd] AS Val FROM yourtable 
    UNION ALL SELECT ID, '3st' AS tbl, [3rd] AS Val FROM yourtable 
    UNION ALL SELECT ID, '4st' AS tbl, [4th] AS Val FROM yourtable 

) AS [s] 
GROUP BY [s].ID, [s].[tbl] 
PIVOT [s].[Val]; 

Если вы хотите итоги, вы можете использовать это один:

TRANSFORM Count([s].[ID]) AS Counts 
SELECT [s].ID, [s].[tbl] 
FROM (SELECT * FROM (
    SELECT ID, '1st' AS tbl, [1st] AS Val FROM yourtable 
    UNION ALL SELECT ID, '2st' AS tbl, [2nd] AS Val FROM yourtable 
    UNION ALL SELECT ID, '3st' AS tbl, [3rd] AS Val FROM yourtable 
    UNION ALL SELECT ID, '4st' AS tbl, [4th] AS Val FROM yourtable) 
    UNION ALL 
    SELECT 999 AS ID, 'Total' AS tbl, Val FROM (
     SELECT ID, '1st' AS tbl, [1st] AS Val FROM yourtable 
    UNION SELECT ID, '2st' AS tbl, [2nd] AS Val FROM yourtable 
    UNION SELECT ID, '3st' AS tbl, [3rd] AS Val FROM yourtable 
    UNION SELECT ID, '4st' AS tbl, [4th] AS Val FROM yourtable) 
) AS [s] 
GROUP BY [s].ID, [s].[tbl] 
PIVOT [s].[Val]; 
+0

Я получил «Механизм базы данных Microsoft Access не распознает« [1] »как допустимое имя поля. Я фактически использовал другое имя поля, но я получил ту же ошибку. – matley

+0

Я протестировал ее на Access 2010, и она работает, как ваше имя таблицы? и имена столбцов? – fthiella

+0

@ user2377055 вы изменили 'yourtable' на фактическое имя вашей таблицы? тогда вам нужно изменить ''1st' AS tbl, [1st] AS Val' как' 'Column1 'AS tbl, [Column1] AS Val' и т. Д. – fthiella

-1

Попробуйте После :

SELECT COUNT(DISTINCT 1st) 
     , COUNT(DISTINCT 2nd) 
     , COUNT(DISTINCT 3rd) 
     , COUNT(DISTINCT 4th) 
     , SUM(
      sum(COUNT(DISTINCT 1st)) 
      ,sum(COUNT(DISTINCT 2nd)) 
      ,sum(COUNT(DISTINCT 3rd)) 
      ,sum(COUNT(DISTINCT 4th)) 
     ) AS Total 
    FROM tableName 
GROUP BY  1st, 2nd, 3rd, 4th 

Надеюсь, что это поможет.

+1

Я получил «Неверное количество аргументов, используемых с функцией в выражении запроса SUM (COUNT (DISTINCT (1-й)), COUNT (DISTINCT (второй)), COUNT (DISTINCT (третий)), COUNT (DISTINCT (4т h)) – matley

+0

@ user2377055 получил ошибку, пройдите отредактированный – Freelancer

+1

Те же ошибки. Я думаю, что DISTINCT (Имя поля) не поддерживается в Access – matley