Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Часть колонок перевести в столбцы  [new]
Stanislav L.
Member

Откуда:
Сообщений: 34
Доброго дня.

На соседнем форуме есть пост https://www.sql.ru/forum/actualthread.aspx?tid=851713&pg=-1

Там есть полное описание и листинги, как в запросе:

+
select Kulp.FireType
	, sum ( Case when FireType.id=2 and Forested = 1 then AreaEnd else 0 end) AreaUpWithForest
	, sum ( Case when FireType.id=2 and Forested = 0 then AreaEnd else 0 end) AreaUpNoForest
	, sum ( Case when FireType.id=2 and ProtectCategory != null then AreaEnd else 0 end) AreaProtect
	
	, sum ( Case when FireType.id=1 and Forested = 1 then AreaEnd else 0 end) AreaBottomWithForest
	, sum ( Case when FireType.id=1 and Forested = 0 then AreaEnd else 0 end) AreaBottomNoForest
	, sum ( Case when FireType.id=1 and ProtectCategory != null then AreaEnd else 0 end) AreaProtect
	
	, sum ( Case when FireType.id=3 and Forested = 1 then AreaEnd else 0 end) AreaDownWithForest
	, sum ( Case when FireType.id=3 and Forested = 0 then AreaEnd else 0 end) AreaDownNoForest
	, sum ( Case when FireType.id=3 and ProtectCategory != null then AreaEnd else 0 end) AreaProtect
	
	, sum ( case when KULP.FireType=1	then 1 else 0 end ) Count_Up1
	, sum ( Case when KULP.FireType=2	then 1 else 0 end ) Count_Up2
	, sum ( case when KULP.FireType=3	then 1 else 0 end ) Count_Up3
		
 from KULP, FireType 
 where FireType.id=KULP.FireType
 group by FireType 



Вот счётчики:
	, sum ( case when KULP.FireType=1	then 1 else 0 end ) Count_Up1
	, sum ( Case when KULP.FireType=2	then 1 else 0 end ) Count_Up2
	, sum ( case when KULP.FireType=3	then 1 else 0 end ) Count_Up3
Можно ли их вставить в строку, а не в столбец?
18 май 11, 15:28    [10672105]     Ответить | Цитировать Сообщить модератору
 Re: Часть колонок перевести в столбцы  [new]
Glory
Member

Откуда:
Сообщений: 104751
Stanislav L.
Можно ли их вставить в строку, а не в столбец?

Вам опять советовать прочитать https://www.sql.ru/forum/actualthread.aspx?tid=127456 или сразу тему закрывать ?
18 май 11, 15:30    [10672128]     Ответить | Цитировать Сообщить модератору
 Re: Часть колонок перевести в столбцы  [new]
Stanislav L.
Member

Откуда:
Сообщений: 34
Glory,

Закрывать не надо :) , будет ли нарушением дублирование информации с соседного форума? Т.к. там есть исходные таблицы, скрипт, то что получается сейчас + есть сам вопрос, т.е. задача. всё как в [url=]https://www.sql.ru/forum/actualthread.aspx?tid=128200#1014485[/url]
Да и то что в таблицах я приложил
Если что, то нужно добавить скажите.

К сообщению приложен файл (kulp.csv - 2Kb) cкачать
18 май 11, 16:14    [10672652]     Ответить | Цитировать Сообщить модератору
 Re: Часть колонок перевести в столбцы  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Stanislav L., че-то я не совсем врубился, что получить в итоге надобно...
Можете 2 примера:
1. Как оно есть сейчас.
2. Как оно должно быть (на тех же данных).
18 май 11, 16:21    [10672733]     Ответить | Цитировать Сообщить модератору
 Re: Часть колонок перевести в столбцы  [new]
Stanislav L.
Member

Откуда:
Сообщений: 34
kDnZP,

Спасибо.

1. Как оно есть сейчас http://imglink.ru/show-image.php?id=fff95b2c1473bc1a72fa4f966de3820f

2. Как оно должно быть http://imglink.ru/show-image.php?id=d15bc68b2731d3dd6fdabb92cc53a5d5
18 май 11, 18:51    [10673907]     Ответить | Цитировать Сообщить модератору
 Re: Часть колонок перевести в столбцы  [new]
iljy
Member

Откуда:
Сообщений: 8711
Stanislav L.,

select список_столбцов_кроме_Count, max(Count_Up1) Count_Up1,max(Count_Up2) Count_Up2,max(Count_Up3) Count1_Up3
from Table
group by список_столбцов_кроме_Count,Count_Up1,Count_Up2,Count1_Up3
having grouping(AreaProtect) = 0 and (grouping(Count_Up1) & grouping(Count_Up2) = 1 or grouping(Count1_Up3) = 0)
Как-то так. Естественно не проверял, ибо не на чем.
18 май 11, 19:09    [10673991]     Ответить | Цитировать Сообщить модератору
 Re: Часть колонок перевести в столбцы  [new]
iljy
Member

Откуда:
Сообщений: 8711
iljy,

а, да, group by .... with rollup
18 май 11, 19:10    [10673998]     Ответить | Цитировать Сообщить модератору
 Re: Часть колонок перевести в столбцы  [new]
Stanislav L.
Member

Откуда:
Сообщений: 34
iljy,

По поводу списка столбцов не совсем понятно. Каке пречислять, а какие нет пробовал без Count и с ними. Не работает.
Эти столбцы не ключать
Count_Up1,Count_Up2,Count1_Up3
, а эти включить
FireType , AreaUpWithForest, AreaUpNoForest, AreaProtect, AreaBottomWithForest, AreaBottomNoForest, AreaDownWithForest,AreaDownNoForest
так?

iljy
а, да, group by .... with rollup

здесь по подробнее, пожалуйста.
19 май 11, 11:18    [10676434]     Ответить | Цитировать Сообщить модератору
 Re: Часть колонок перевести в столбцы  [new]
iljy
Member

Откуда:
Сообщений: 8711
Stanislav L.
здесь по подробнее, пожалуйста.

Скрипты с данными выложите - будет поподробнее.
19 май 11, 17:04    [10679967]     Ответить | Цитировать Сообщить модератору
 Re: Часть колонок перевести в столбцы  [new]
Stanislav L.
Member

Откуда:
Сообщений: 34
iljy,

Сорри, вот данные
--FireType
CREATE TABLE [dbo].[FireType](
	[id] [bigint] IDENTITY(1,1) NOT NULL,
	[name] [char](9) NULL
	
) ON [PRIMARY]

INSERT INTO [forest].[dbo].[FireType]
           ([name])
     VALUES
           ('Верховой'),
           ('Низовой'),
           ('Подземный')

--KULP
CREATE TABLE [dbo].[KULP](
	[ProtectCategory] [char](17) NULL,
	[Forested] [bit] NULL,
	[AreaEnd] [real] NULL,
	[FireType] [char](9) NULL,

) ON [PRIMARY]

INSERT INTO [forest].[dbo].[KULP]
           ([ProtectCategory]
           ,[Forested]
           ,[AreaEnd]
           ,[FireType])
     VALUES
	    ('Защитные',1, 0.50, 1)
           ,('Экпуатационные',1, 1.40, 2)
           ,('Экпуатационные',1, 0.35, 3)
           ,('Защитные',1, 0.27, 2)
           ,('Защитные',1, 1.14, 2)

--DROP
DROP [dbo].[FireType]
DROP [dbo].[KULP]

Можно ли в выходной информации сгруппировать FireType в строках, например, первая 1 тип, вторая строка 2+3 тип? (это для другой таблицы, что бы не создавать новой темы)
20 май 11, 10:58    [10682731]     Ответить | Цитировать Сообщить модератору
 Re: Часть колонок перевести в столбцы  [new]
iljy
Member

Откуда:
Сообщений: 8711
Stanislav L.,

и что для этих данных надо получить?
20 май 11, 16:29    [10685807]     Ответить | Цитировать Сообщить модератору
 Re: Часть колонок перевести в столбцы  [new]
Stanislav L.
Member

Откуда:
Сообщений: 34
iljy,

Сейчас результат выодится в иде трёх строк,
Можно ли выводить результат в двух строках, где одна из строк будет результатом суммы двух дугих
20 май 11, 16:56    [10686011]     Ответить | Цитировать Сообщить модератору
 Re: Часть колонок перевести в столбцы  [new]
iljy
Member

Откуда:
Сообщений: 8711
Stanislav L.,

вы не в госструктурах работаете? Из вас отличный партизан получится! Каких 3 строк? И какие 2?
20 май 11, 16:59    [10686028]     Ответить | Цитировать Сообщить модератору
 Re: Часть колонок перевести в столбцы  [new]
Stanislav L.
Member

Откуда:
Сообщений: 34
iljy,

:) а настоящие партизаны только в госструктурах водятся?...
В сообщение 10673907 есть скиншот
автор
1. Как оно есть сейчас http://imglink.ru/show-image.php?id=fff95b2c1473bc1a72fa4f966de3820f


Так вот там три строки т.к. "group by FireType"("FireType" всего три вида). Но можноли получить результат где одня из строк будет содержать сумму 2 и 3 "FireType", т.е. так

FireTypeAreaUpWithForestAreaUpNoForestAreaProtectAreaBottomWithForestAreaBottomCount_Up1Count_Up2Count_Up3
1 0.0000 0.0000 0.0000 0.5000 0.0000 0.0000 0.0000 0.0000100
2 2.8100 1.0000 0.2000 0.0000 0.0000 0.0000 0.0000 0.0000030
3 0.0000 0.5000 4.2000 0.0000 0.0000 0.0000 0.3500 0.0000001


То что болжно получится
FireTypeAreaUpWithForestAreaUpNoForestAreaProtectAreaBottomWithForestAreaBottomCount_Up1Count_Up2Count_Up3
1 0.0000 0.0000 0.0000 0.5000 0.0000 0.0000 0.0000 0.0000100
2 2.8100 1.5000 4.4000 0.0000 0.0000 0.0000 0.3500 0.0000031

Как видно результат второй строки просто сумма 2й и 3й строк пред идущей таблицы.
23 май 11, 10:00    [10692435]     Ответить | Цитировать Сообщить модератору
 Re: Часть колонок перевести в столбцы  [new]
iljy
Member

Откуда:
Сообщений: 8711
Stanislav L.,

нет, просто там они наиболее востребованы.
на вашем скриншоте куча полей, которых нет в таблице. И примера с 2мя строками там не было, а был пример с 4мя.
Сделайте группировку по FireType/2 например. Или по любому другому выражению, дающему нужные значения.
23 май 11, 10:04    [10692450]     Ответить | Цитировать Сообщить модератору
 Re: Часть колонок перевести в столбцы  [new]
Stanislav L.
Member

Откуда:
Сообщений: 34
iljy,

Т.е. так "where FireType=2"? Но в резельтате будет одна строчка.
Можно по подробнее, может пример есть?
23 май 11, 12:40    [10693633]     Ответить | Цитировать Сообщить модератору
 Re: Часть колонок перевести в столбцы  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Stanislav L.,

...
group by FireType/2
или
...
group by FireType(+-*/%CASE какая-то еще специфическая или загадочная система)
23 май 11, 12:49    [10693729]     Ответить | Цитировать Сообщить модератору
 Re: Часть колонок перевести в столбцы  [new]
Stanislav L.
Member

Откуда:
Сообщений: 34
kDnZP
Stanislav L.,

...
group by FireType/2
или
...
group by FireType(+-*/%CASE какая-то еще специфическая или загадочная система)


Первый вариант не работатет
"Рядом с "group" в контексте, где ожидается условие, указано выражение типа, отличного от логического."

Вторя по видимому тоже
"Неправильный синтаксис около конструкции ")"."


Версия SQL
Microsoft SQL Server 2008 (SP1) - 10.0.2714.0 (X64) May 14 2009 16:08:52 Copyright (c) 1988-2008 Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)


Что ж делать то?
23 май 11, 17:26    [10695965]     Ответить | Цитировать Сообщить модератору
 Re: Часть колонок перевести в столбцы  [new]
Glory
Member

Откуда:
Сообщений: 104751
Stanislav L.

Что ж делать то?

Понять смысл.
Если вы хотите, чтобы записи объединялись при группировке, то нужно сделать так, чтобы у них совпадали значения выражений группировки
Вот и сделайте так, чтобы FireType 2+3 как то вычислялось одинаковое выражение группировки
23 май 11, 17:31    [10695999]     Ответить | Цитировать Сообщить модератору
 Re: Часть колонок перевести в столбцы  [new]
Stanislav L.
Member

Откуда:
Сообщений: 34
Glory,

Пока мой уровень не слишком высок. Если не сложно приведите пример запроса с одинаковым выражением группировки.
Glory
...чтобы FireType 2+3 как то вычислялось одинаковое выражение группировки
24 май 11, 15:25    [10700716]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить