Как выполнить SQL-запрос для диапазона элементов?
в моей базе данных есть главная таблица (напр. Table_A). столбец 1 содержит название элементов, а столбец 6 - дату моей строки данных. Столбец 7 - это тип элементов столбца 1, которые находятся от А до Я.
например (некоторые строки таблицы Table_A):
|item_1 |200 |120 |300 |40 |201702 |type_A | |item_2 |210 |320 |340 |10 |201702 |type_A | |item_1 |150 |30 |70 |38 |201703 |type_A | |item_2 |315 |220 |120 |40 |201703 |type_A | |item_3 |40 |500 |110 |35 |201702 |type_B | |item_4 |758 |78 |152 |61 |201702 |type_B | |item_3 |778 |920 |12 |330 |201703 |type_B | |item_4 |315 |220 |120 |40 |201703 |type_B |
теперь я хочу показать элементы из каждого типа в столбце 7 с определенной даты (например, 201703), а затем ниже этой суммы столбца 2, суммы столбца 3, суммы столбца 4, суммы столбца 5.а затем ниже той скорости роста, которая вычисляется в функции (((сумма месяца / сумма предыдущего месяца)*100)-100)
и для приведенного выше примера результат, который я хочу, таков:
|item_1 |150 |30 |70 |38 |201703 |type_A | |item_2 |315 |220 |120 |40 |201703 |type_A | |sum |465 |250 |190 |78 |201703 |type_A | |rate |13.1 |-43.1|-74.3|56 |201703 |type_A | |item_3 |778 |920 |12 |330 |201703 |type_B | |item_4 |315 |220 |120 |40 |201703 |type_B | |sum |1093 |1140 |132 |370 |201703 |type_B | |rate |36.96|97.23|-18.5|285.4|201703 |type_B |
Что я уже пробовал:
( SELECT col1, col2, col3, col4, col5, col6, col7 FROM Table_A INNER JOIN Table_B ON Table_A.col1 = Table_B.col1 WHERE Table_A.col6 = 201703 AND (Table_A.col7 = 'type_A') ) UNION ALL ( SELECT 'sum', SUM(col2), SUM(col3), SUM(col4), SUM(col5), 201703, 'type_A' FROM Table_A INNER JOIN Table_B ON Table_A.col1 = Table_B.col1 WHERE Table_A.col6 = 201703 AND (Table_A.col7 = 'type_A') ) --sum of data with 'g' UNION ALL ( SELECT N'Rate', ( ROUND ( ( ( ( ( SELECT CONVERT (FLOAT,SUM(col2)) FROM Table_A WHERE Table_A.col6 = 201703 AND (Table_A.col7 = 'type_A') ) / ( SELECT CONVERT (FLOAT,SUM(col2)) FROM Table_A WHERE Table_A.col6 = (201703 - 1) AND (Table_A.col7 = 'type_A') ) )*100 )-100 ),2 ) ) , ( ROUND ( ( ( ( ( SELECT CONVERT (FLOAT,SUM(col3)) FROM Table_A WHERE Table_A.col6 = 201703 AND (Table_A.col7 = 'type_A') ) / ( SELECT CONVERT (FLOAT,SUM(col3)) FROM Table_A WHERE Table_A.col6 = (201703 - 1) AND (Table_A.col7 = 'type_A') ) )*100 )-100 ),2 ) ) , ( ROUND ( ( ( ( ( SELECT CONVERT (FLOAT,SUM(col4)) FROM Table_A WHERE Table_A.col6 = 201703 AND (Table_A.col7 = 'type_A') ) / ( SELECT CONVERT (FLOAT,SUM(col4)) FROM Table_A WHERE Table_A.col6 = (201703 - 1) AND (Table_A.col7 = 'type_A') ) )*100 )-100 ),2 ) ) , ( ROUND ( ( ( ( ( SELECT CONVERT (FLOAT,SUM(col5)) FROM Table_A WHERE Table_A.col6 = 201703 AND (Table_A.col7 = 'type_A') ) / ( SELECT CONVERT (FLOAT,SUM(col5)) FROM Table_A WHERE Table_A.col6 = (201703 - 1) AND (Table_A.col7 = 'type_A') ) )*100 )-100 ),2 ) ) , NULL , 'type_A' )
но этот код показывает только один тип из столбца 7.