2015-04-30 3 views
1

У меня есть таблица вроде:Группировка матча между несколькими полями

| id | field1 | field2 | field3 |  
--------------------------------------------- 
| 1  |  A |  B | C  | 
| 2  |  E |  F | G  | 
| 3  |  H |  A | I  | 
| 4  | *null* |  J | K  | 
| 5  |  C |  L | M  | 
--------------------------------------------- 

теперь я хочу, чтобы найти группу дубликатов. Я пишу этот вопрос:

SELECT FIRST(ID), COUNT(id) 
FROM MyTable 
GROUP BY field1 
HAVING COUNT(id) > 1 

это возвращает дубликаты только field1. Если я пишу GROUP BY field1, field2, field3, он возвращает дубликаты по трем полям. Но я хочу найти дубликаты из любого поля и сгруппировать результирующий набор. Иными словами, такой результат:

| Count | Value | 
--------------------- 
| 2  | A | 
| 2  | C | 
--------------------- 

Возможно ли это в простой группе? Значения не фиксированной ширины и могут быть нулевыми.

ответ

1

Вы можете создать союзный запрос:

SELECT Field1 AS FieldValue FROM MyTable 
UNION ALL 
SELECT Field2 AS FieldValue FROM MyTable 
UNION ALL 
SELECT Field3 AS FieldValue FROM MyTable 

Теперь использовать этот запрос в качестве источника в запросе аналогичного оригинала.

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