2010-03-18 5 views
2

Я делаю отчет на работе, который смотрит на 5 столбцов, которые содержат v1aa, v1ab и v1ac.T SQL Count question

То, что я хочу сделать, это подсчитать все v1aa в 5 столбцов и показать результаты (и то же самое для v1ab и v1ac)

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

Amber = 3 (v1aa code) 
Blue = 2 (v1ab code) 
Red = 1 (v1ac code) 

Может ли кто-нибудь дать мне какие-либо советы, как мне начать?

+0

Не могли бы вы разместить некоторые данные примера? – amelvin

ответ

0

Это вы что искали?

SELECT 
    SUM((CASE WHEN Column1 = 'v1aa' THEN 1 ELSE 0 END) 
     + (CASE WHEN Column2 = 'v1aa' THEN 1 ELSE 0 END) 
     + (CASE WHEN Column3 = 'v1aa' THEN 1 ELSE 0 END) 
     + (CASE WHEN Column4 = 'v1aa' THEN 1 ELSE 0 END) 
     + (CASE WHEN Column5 = 'v1aa' THEN 1 ELSE 0 END)) 
    AS Amber, 
    SUM((CASE WHEN Column1 = 'v1ab' THEN 1 ELSE 0 END) 
     + (CASE WHEN Column2 = 'v1ab' THEN 1 ELSE 0 END) 
     + (CASE WHEN Column3 = 'v1ab' THEN 1 ELSE 0 END) 
     + (CASE WHEN Column4 = 'v1ab' THEN 1 ELSE 0 END) 
     + (CASE WHEN Column5 = 'v1ab' THEN 1 ELSE 0 END)) 
    AS Blue, 
    SUM((CASE WHEN Column1 = 'v1ac' THEN 1 ELSE 0 END) 
     + (CASE WHEN Column2 = 'v1ac' THEN 1 ELSE 0 END) 
     + (CASE WHEN Column3 = 'v1ac' THEN 1 ELSE 0 END) 
     + (CASE WHEN Column4 = 'v1ac' THEN 1 ELSE 0 END) 
     + (CASE WHEN Column5 = 'v1ac' THEN 1 ELSE 0 END)) 
    AS Red 
FROM 
    dbo.MyTable 
0

Я думаю, это поможет вам начать работу. Возможно, вам придется добавить предложение WHERE, если возможны NULL или дополнительные коды в данных, которые вы не хотите показывать в своем отчете.

SELECT CASE i.code 
    WHEN 'v1aa' THEN 'Amber' 
    WHEN 'v1ab' THEN 'Blue' 
    WHEN 'v1ac' THEN 'Red' END, 
    COUNT(*) 
FROM 
(
    SELECT Col1 AS Code FROM Test 
    UNION ALL SELECT Col2 FROM Test 
    UNION ALL SELECT Col3 FROM Test 
    UNION ALL SELECT Col4 FROM Test 
    UNION ALL SELECT Col5 FROM Test 
) i 
GROUP BY i.Code 
0

Если вы хотите, чтобы эти счетчик для каждой записи, а затем попробовать:

Select 
    Case When Col1 Like '%v1aa%' Then 1 Else 0 End + 
    Case When Col2 Like '%v1aa%' Then 1 Else 0 End + 
    Case When Col3 Like '%v1aa%' Then 1 Else 0 End + 
    Case When Col4 Like '%v1aa%' Then 1 Else 0 End + 
    Case When Col5 Like '%v1aa%' Then 1 Else 0 End As AmberCount, 
    Case When Col1 Like '%v1ab%' Then 1 Else 0 End + 
    Case When Col2 Like '%v1ab%' Then 1 Else 0 End + 
    Case When Col3 Like '%v1ab%' Then 1 Else 0 End + 
    Case When Col4 Like '%v1ab%' Then 1 Else 0 End + 
    Case When Col5 Like '%v1ab%' Then 1 Else 0 End As BlueCount, 
    Case When Col1 Like '%v1ac%' Then 1 Else 0 End + 
    Case When Col2 Like '%v1ac%' Then 1 Else 0 End + 
    Case When Col3 Like '%v1ac%' Then 1 Else 0 End + 
    Case When Col4 Like '%v1ac%' Then 1 Else 0 End + 
    Case When Col5 Like '%v1ac%' Then 1 Else 0 End As RedCount 
From MyTable 

Если вы хотите, счетчик для всей таблицы затем добавить функцию агрегирования Sum(), как Тимоти Хури предложил в своем ответ

+0

Hiya Guys Timothy Khouri - спасибо, что вы работали в Spott :) – user296146