Категория и подкатегория в одном столбце в sql

#sql #sql-server

#sql #sql-сервер

Вопрос:

Как мы можем показать category и subcategory в одном столбце в sql. Оба столбца присутствуют в одной таблице TableA .

Пример: TableA

 --------------------------------------
| category |  subcategory |  Values  |
--------------------------------------
| Bird     |  parrot       |     5   |
| Bird     |  pigeon       |     10  |
| Animal   |  lion         |     2   |
| Animal   |  Tiger        |     5   |
--------------------------------------
 

Выходная таблица :

 -------------------
| NEW    |  Value  |
--------------------
| Bird   |   15    |
| parrot |   5     |
| Piegon |   10    |
| Animal |   7     |
| lion   |   2     |
| Tiger  |   5     |
--------------------
 

В выходных данных New — это столбец, в котором мне нужны как категория, так и подкатегория.

Пример запроса для генерации данных:

 CREATE TABLE #TEMP
(
catgory nvarchar(200),
sub_category nvarchar(200),
[values] nvarchar(200),
)

INSERT INTO #TEMP VALUES ('Bird','parrot',5)
INSERT INTO #TEMP  VALUES ('Bird','pigeon',10)
INSERT INTO #TEMP VALUES ('Animal','lion',2)
INSERT INTO #TEMP VALUES ('Animal','Tiger',5)
 

Где логика есть:

Я хочу, чтобы категория и подкатегория были вместе, где категория должна показывать сумму всех значений подкатегорий и должна быть в порядке, так как у меня есть выходная таблица

Комментарии:

1. Пожалуйста, предоставьте примеры данных, желаемые результаты и соответствующий тег базы данных.

2. @GordonLinoff Я предоставил образцы данных, если вы знаете, пожалуйста, дайте мне знать..

3. база данных @pinkyadhikari? MySQL? MSSQL?

4. @PrashantPimpale SQL server

5. @pinkyadhikari какова логика этого ожидаемого результата?

Ответ №1:

 select category, sum(values) values from table group by category
union
select subcategory, values from table
 

Ответ №2:

 WITH cte AS
(
    SELECT category,value FROM yourtable WHERE category IS NOT NULL
    UNION ALL
    SELECT subcategory, value FROM yourtable WHERE subcategory IS NOT NULL    
)
SELECT Company as new, value FROM cte
 

Ответ №3:

Вы можете использовать cte :

 with cte as (
     select t.*, 
            dense_rank() over (order by category) as seq, 
            sum([values]) over (partition by category) as sums
     from table t
)

select t.cat as new, (case when cat_name = 'category' then sums else c.[values] end) as Value
from cte c cross apply
     ( values ('category', category), ('sub_category', sub_category) ) t(cat_name, cat)
order by seq, (case when cat_name = 'category' then 1 else 2 end);
 

Ответ №4:

Попробуй это.

 select new, [values] from (select catgory, sub_category as 'new', [values] from temp 
union all 
select catgory, catgory as 'new', sum([values]) from temp group by catgory) order by catgory
 

Выходной сигнал:

     new values
   -------------
    parrot  5
    pigeon  10
    Bird    15
    lion    2
    lion    2
    Tiger   5
    Animal  9
 

Ответ №5:

Требуется ОБЪЕДИНИТЬ ВСЕ после получения сумм с основной таблицей:

 select 
  case t.sub_category
    when '' then t.category
    else sub_category
  end new,
  t.value
from (
  select category, '' sub_category, sum([values]) value from temp group by category
  union all
  select category, sub_category, [values] value from temp
) t
order by t.category, t.sub_category
 

Посмотрите демонстрацию.
Результаты:

 > new    | value
> :----- | ----:
> Animal |     7
> lion   |     2
> Tiger  |     5
> Bird   |    15
> parrot |     5
> pigeon |    10
 

Ответ №6:

Простой способ сделать это использует grouping sets :

 select coalesce(subcategory, category) as new, sum(val)
from temp
group by grouping sets ( (category), (subcategory, category))
order by category, subcategory
 

Вот скрипка db<>.

Ответ №7:

Структура таблицы:

Идентификатор, имя, ParentCategoryID

1, животные, null

2, рыба, 1

Пример mssql:

 Select name,  subcats = STUFF((
            SELECT ','   NAME
            FROM category as cat1 where cat1.parentcategoryId = cat. parentcategoryId
            FOR XML PATH('')
            ), 1, 1, '')  from category as cat where parentcategoryId = null
 

Предварительный просмотр:

Имя, вложенные

Животные, рыбы