2014-09-22 4 views
0

В моей базе данных у меня есть несколько тысяч клиентов, с определенными критериями, происходящими с разными интервалами. Есть колонки для каждого дня недели (M, Tu, W, Th, F, Sa, Su). Мне нужно узнать, сколько дней в неделю будет запускаться задание. У меня есть запрос ниже, но он, конечно, также возвращает конкретный день недели вместе с TotalDays в неделю. Тем не менее, мне нужно видеть только TotalDays, а не дополнительный показ каждый отдельный день. Как я могу это сделать?Дело и сумма нескольких столбцов

SELECT X.*,M+Tu+W+Th+F+Sa+Su AS TotalDays 
FROM 
    (
    SELECT 
     CASE WHEN [M] = '1' THEN 1 ELSE 0 END as "M", 
     CASE WHEN [Tu] = '1' THEN 1 ELSE 0 END as "Tu", 
     CASE WHEN [W] = '1' THEN 1 ELSE 0 END as "W", 
     CASE WHEN [Th] = '1' THEN 1 ELSE 0 END as "Th", 
     CASE WHEN [F] = '1' THEN 1 ELSE 0 END as "F", 
     CASE WHEN [Sa] = '1' THEN 1 ELSE 0 END as "Sa", 
     CASE WHEN [Su] = '1' THEN 1 ELSE 0 END as "Su" 
    FROM 
     Customers 
    ) X 

Я должен сказать, что тип данных здесь немного, так что я не могу просто сделать Sum дней, такими как следующий, как это возвращает ошибку, что бит данных типа недопустимо для оператора суммы.

SELECT 
(SUM(M) + SUM(Tu) + SUM(W) + SUM(Th) + SUM(F) + SUM(Sa) + SUM(Su)) as TotalDays 
FROM Customers 
+1

Что делать, если вы используете COUNT вместо SUM? – Pieter21

+0

COUNT не работает, так как он возвращает 7 для каждого клиента, поэтому он учитывает как значения 0, так и 1. Как уже упоминалось, SUM не работает. Я получаю возвращенную ошибку, что бит типа данных недействителен для оператора sum. – aantiix

ответ

3

Это то, что вы хотите?

SELECT SUM(CASE WHEN [M] = '1' THEN 1 ELSE 0 END + 
      CASE WHEN [Tu] = '1' THEN 1 ELSE 0 END + 
      CASE WHEN [W] = '1' THEN 1 ELSE 0 END + 
      CASE WHEN [Th] = '1' THEN 1 ELSE 0 END + 
      CASE WHEN [F] = '1' THEN 1 ELSE 0 END + 
      CASE WHEN [Sa] = '1' THEN 1 ELSE 0 END + 
      CASE WHEN [Su] = '1' THEN 1 ELSE 0 END 
     ) 
FROM Customers; 
+0

Это именно то, что мне нужно. Большое спасибо! – aantiix

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