Вопрос

У меня есть таблица с несколькими столбцами, которые представляют возникновение действия.

SimpleTableExample

id  type $$$$$ value1 value2 value3 ... value15
--  ----  --   -----  -----  -----      -----
1    "I"   1    "a"    "b"    ""         ""
2    "O"   1    "a"    "d"    "f"        "z"
3    "I"   1    "d"    "b"    ""         ""
4    "O"   1    "g"    "l"    ""         ""
5    "I"   1    "z"    "g"    "a"         ""
6    "I"   1    "z"    "g"    "a"         "a"

Не совсем уверен, как представить данные, но вышеупомянутое должно показать их ... на строку, у меня есть несколько столбцов, которые я хочу сгруппировать. Сосредоточившись на части «А», я бы хотел результат такой, что:

Type     Value    Count  Sum
-----    -----    -----  ---
"I"      "A"      "3"     3
"O"      "A"      "2"     1

Просто не уверен, как пойти или даже наилучшим образом, чтобы группировать с несколькими столбцами. Если бы это был «высокий» таблицу с номером последовательности, это будет щелчок ...

Одна вещь, о которой я беспокоюсь ... если у меня есть одинаковое значение в нескольких рядах (у них одно и то же действие, выполненное несколько раз), и я складываю столбцы и пытаюсь суммировать строки. Так, например, ряд 6 имеет 3 и 15 со значением a, и я стараюсь суммировать () итоги этой группы, я не хочу, чтобы 6 подсчитано дважды (показано выше

Редактировать: Пытаюсь уточнить здесь ... у меня есть ряд клиентов с «действиями». Действия переполнены в значение1 через значение15. Я хочу получить подсчет групп «типа, стоимость».

Граф, который у меня был ранее, был неправильным ... Я хочу, чтобы у разных клиентов были определенные действия, а не количество определенных действий. Таким образом, IA должен быть 4 -м счетом, используя приведенную выше видимую таблицу.

Заключительная примечаниеОбзор кода Вопрос о том, что я придумал. Освободите, чтобы составить список уникальных пар дат/значения.

Это было полезно?

Решение

Предполагая SQL 2005 или выше, вы можете использовать Раскрыть а затем сделайте свою группу и считает

Другие советы

У вас есть возможность поместить эту таблицу в первую нормальную форму и разбить эти повторные столбцы на дочернюю таблицу? Потому что, если мы откладываем в сторону теорию того, почему 1NF хороша, практическая реальность такова, что ненормализованные примеры, подобные этому, делают простые вопросы жесткими.

С учетом вышесказанного, если вы застряли в этой ненормализованной таблице, вы должны кодировать что-то вроде этого:

select type
     , 'A' as Column2
     , sum(case when value1='A' or value2='A' or.....
               then 1 else 0 end) as theCount
  from theTable
 group by type

Если вы хотите запрашивать несколько значений, а не только «а», вы должны разворачивать таблицу в запросе, в котором участвуют около 15 профсоюзов:

select type,value,count(*) from (
    select type,value1 as value from theTable
    union all
    select type,value2 as value from theTable
    union all
    select type,value3 as value from theTable
    ...and so on...
) x
group by type,value
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top