Подсчет количества столбцов с несколькими столбцами
У меня есть большой стол, который (среди прочего) включает в себя 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
). Возможно, я слишком задумываюсь об этом, но я не уверен, как это сделать.
Ну, имея структуру таблицы, у вас есть единственный вариант - иметь оператор 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)
Как вы уже знаете, нормализация вашей структуры значительно упростит такие запросы.
Еще в рубрике
- Вопросы
- Sql-server
- Подсчет количества столбцов с несколькими столбцами