Подсчет количества столбцов с несколькими столбцами

82
6

У меня есть большой стол, который (среди прочего) включает в себя 10 различных полей деталей и количества:

detail_1 | qty_1 | detail_2 | qty_2 | detail_3 | qty_3 | detail_4 | qty_4 | detail_5 | qty_5 | detail_6 | qty_6 |  ...etc

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

SELECT a.Total as [Quantity], COUNT(a.Total) as [Total]
FROM

(SELECT (ISNULL(qty_1, 0)
+ ISNULL(qty_2, 0)
+ ISNULL(qty_3, 0)
+ ISNULL(qty_4, 0)
+ ISNULL(qty_5, 0)
+ ISNULL(qty_6, 0)
+ ISNULL(qty_7, 0)
+ ISNULL(qty_8, 0)
+ ISNULL(qty_9, 0)
+ ISNULL(qty_10, 0)) as [Total]
FROM endicia_temp) a

GROUP BY a.Total
ORDER BY Quantity

Это дает мне мой желаемый результат:

Quantity Total
2 169 //169 records with total quantity 2
13 2 //2 records with total quantity 13
16 39
17 1
55 2
107 1 //1 record with total quantity 107

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что мне нужно добавить предложение where, чтобы в общую сумму включались только определенные количества из каждой записи. Что-то вроде WHERE [detail_column_here] LIKE '%sample%'. Идея состоит в том, что одна запись может включать только qty_1 (на основе detail_1), в то время как другая может включать qty_3, qty_4 и qty_5 (на основе detail_3, detail_4 и detail_5). Возможно, я слишком задумываюсь об этом, но я не уверен, как это сделать.

спросил(а) 2014-09-03T22:04:00+04:00 6 лет, 2 месяца назад
1
Решение
59

Ну, имея структуру таблицы, у вас есть единственный вариант - иметь оператор CASE в каждом компоненте суммы:

SELECT (CASE WHEN detail_1 LIKE '%sample%' THEN ISNULL(qty_1, 0) ELSE 0 END
+ CASE WHEN detail_2 LIKE '%sample%' THEN ISNULL(qty_2, 0) ELSE 0 END
+ CASE WHEN detail_3 LIKE '%sample%' THEN ISNULL(qty_3, 0) ELSE 0 END
+ CASE WHEN detail_4 LIKE '%sample%' THEN ISNULL(qty_4, 0) ELSE 0 END
+ CASE WHEN detail_5 LIKE '%sample%' THEN ISNULL(qty_5, 0) ELSE 0 END
+ CASE WHEN detail_6 LIKE '%sample%' THEN ISNULL(qty_6, 0) ELSE 0 END
+ CASE WHEN detail_7 LIKE '%sample%' THEN ISNULL(qty_7, 0) ELSE 0 END
+ CASE WHEN detail_8 LIKE '%sample%' THEN ISNULL(qty_8, 0) ELSE 0 END
+ CASE WHEN detail_9 LIKE '%sample%' THEN ISNULL(qty_9, 0) ELSE 0 END
+ CASE WHEN detail_10 LIKE '%sample%' THEN ISNULL(qty_10, 0) ELSE 0 END)

Как вы уже знаете, нормализация вашей структуры значительно упростит такие запросы.

ответил(а) 2014-09-03T22:10:00+04:00 6 лет, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема