Количество значений столбца T-SQL - PullRequest
1 голос
/ 31 января 2012

Скажем, у меня есть таблица A, и она имеет 5 столбцов (Column1, Column2 .. Column5), значения в каждом столбце имеют один размер символа и хранятся только в алфавитном порядке следующим образом


    ID Column1 Column2 Column3 Column4 Column5
    1   A        C       D        A      B
    2   A        D       A        B      A
    3   B        K       Q        C      Q
    4   A        K       E        E      B
    5   F        K       F        F      S


Мне нужноколичество каждого отдельного значения, хранящегося в столбцах с 1 по 5, я хочу получить следующую информацию


     Column1 has A's count=3, B's count=1, F's count=1
     Column2 has C's count=1, D's count=1, K's count=3

     and so on


Как правильно и форматировать эти значения?

Спасибо

Ответы [ 4 ]

4 голосов
/ 31 января 2012

Вы можете попробовать:

SELECT 'Col1' As 'Col', Column1 as 'Value', COUNT(*) as 'Ct'
FROM MyTable
GROUP BY Column1
UNION ALL
SELECT 'Col2', Column2, COUNT(*)
FROM MyTable
GROUP BY Column2
...

Вам нужно будет написать дополнительно SELECT до UNION для каждого столбца, который вы хотите агрегировать, но он вернет данные, которые вы ищете.

1 голос
/ 01 февраля 2012

Вы можете использовать unpivot в производной таблице (или CTE) и group by имя и значение столбца во внешнем запросе.

Попробуйте это:

declare @T table
(
  ID int,
  Column1 char(1), 
  Column2 char(1), 
  Column3 char(1),
  Column4 char(1),
  Column5 char(1)
)

insert into @T values
(1,   'A',        'C',       'D',        'A',      'B'),
(2,   'A',        'D',       'A',        'B',      'A'),
(3,   'B',        'K',       'Q',        'C',      'Q'),
(4,   'A',        'K',       'E',        'E',      'B'),
(5,   'F',        'K',       'F',        'F',      'S')

;with C as
(
  select ID, Col, Val
  from (
         select ID, Column1, Column2, Column3, Column4, Column5
         from @T
       ) as T
  unpivot (Val for Col in (Column1, Column2, Column3, Column4, Column5)) as U   
)
select Col, Val, count(*) as ValCount
from C
group by Col, Val
order by Col
1 голос
/ 01 февраля 2012

Профсоюзный подход лучше всего подходит для вас.Индивидуальный запрос для каждого объединения будет выглядеть примерно так:

Select Distinct Column1, COUNT(Column1)OVER(PARTITION BY Column1) Col1Count, 'Column1' ColumnName
From ColTable
Union All
...
1 голос
/ 31 января 2012

Вы можете просто выполнить отдельный запрос для каждого необходимого столбца, используя GROUP BY?

SELECT Column1, COUNT(Column1) FROM TableName
GROUP BY Column1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...