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

Откуда:
Сообщений: 39
Добрый день, уважаемые!
Имеются такие данные:
+

USE tempdb


IF EXISTS (SELECT * FROM sys.objects
           WHERE  object_id = Object_id(N'[dbo].[actions]')
              AND TYPE IN ( N'U' ))
  DROP TABLE [actions]

CREATE TABLE [actions]
  (
     [institution_title] [NVARCHAR](50) NOT NULL,
     [action_date]       [DATETIME] NOT NULL,
     [action_title]      [NVARCHAR](50) NOT NULL
  )

INSERT INTO actions
	  SELECT 'ДК Цементник',  '4.01.2013',  'Новогодняя елка'
UNION SELECT 'ДК Цементник',  '5.01.2013',  'Детский утренник'
UNION SELECT 'ДК Цементник',  '6.01.2013',  'Просто пьянка' 
UNION SELECT 'ДК Юбилейный',  '6.01.2013',  'Детский утренник' 
UNION SELECT 'Сельский клуб', '11.01.2013', 'Пьянка по поводу' 
UNION SELECT 'Сельский клуб', '12.01.2013', 'Пьянка без повода'
UNION SELECT 'ДК Цементник',  '22.02.2013', 'Подготовка к 23 февраля'
UNION SELECT 'ДК Цементник',  '23.02.2013', 'Детский утренник'
UNION SELECT 'Сельский клуб', '11.02.2013', 'Именины директора' 
UNION SELECT 'ДК Юбилейный',  '7.03.2013',  'Подготовка к 8 Марта' 
UNION SELECT 'ДК Юбилейный',  '8.03.2013',  'Празднование 8 Марта'
UNION SELECT 'ДК Юбилейный',  '9.03.2013',  'Празднование после 8 Марта'    




Хочется получить итоговый отчет такого вида:
institution_title jan feb mar
ДК Цементник Новогодняя елка Подготовка к 23 февраля NULL
ДК Цементник Детский утренник Детский утренник NULL
ДК Цементник Просто пьянка NULL NULL
ДК Юбилейный Детский утренник NULL Подготовка к 8 Марта
ДК Юбилейный NULL NULL Празднование 8 Марта
ДК Юбилейный NULL NULL Празднование после 8 Марта
Сельский клуб Пьянка по поводу Именины директора NULL
Сельский клуб Пьянка без повода NULL NULL


Microsoft SQL Server 2005 - 9.00.5069.00 ........

Большое спасибо за помощь!!!
16 окт 12, 10:26    [13324640]     Ответить | Цитировать Сообщить модератору
 Re: Сводная таблица  [new]
Glory
Member

Откуда:
Сообщений: 104751
PIVOT
или
CASE
16 окт 12, 10:29    [13324660]     Ответить | Цитировать Сообщить модератору
 Re: Сводная таблица  [new]
Felyeton
Member

Откуда:
Сообщений: 39
Если с CASE - то так что ли?

SELECT
  institution_title,
  CASE WHEN Month(action_date) = 1 THEN action_title ELSE NULL END AS jan,
  CASE WHEN Month(action_date) = 2 THEN action_title ELSE NULL END AS feb,
  CASE WHEN Month(action_date) = 3 THEN action_title ELSE NULL END AS mar
FROM  actions
ORDER  BY institution_title, jan DESC, feb DESC, mar DESC 

Это не то получается совсем

institution_title jan feb mar
ДК ЦементникNULLДетский утренник NULL
ДК Цементник NULL Подготовка к 23 февраля NULL
ДК Цементник Детский утренник NULL NULL
ДК Цементник Новогодняя елка NULL NULL
ДК Цементник Просто пьянка NULL NULL
ДК Юбилейный NULL NULL Подготовка к 8 Марта
ДК Юбилейный NULL NULL Празднование 8 Марта
ДК Юбилейный NULL NULL Празднование после 8 Марта
ДК Юбилейный Детский утренник NULL NULL
Сельский клуб NULL Именины директора NULL
Сельский клуб Пьянка без повода NULL NULL
Сельский клуб Пьянка по поводу NULL NULL


а PIVOT агрегат подразумевает - тоже не то...

SELECT b, [1], [2], [3]
FROM (SELECT Month(action_date) a, institution_title b, action_title
FROM dbo.actions) AT
PIVOT
(Max(AT.action_title)
FOR AT.a IN ([1], [2], [3])) pvt



b 1 2 3
ДК Цементник Просто пьянка Подготовка к 23 февраля NULL
ДК Юбилейный Детский утренник NULL Празднование после 8 Марта
Сельский клуб Пьянка по поводу Именины директора NULL
16 окт 12, 11:41    [13325291]     Ответить | Цитировать Сообщить модератору
 Re: Сводная таблица  [new]
qwerty112
Guest
Felyeton,

select [institution_title], [1], [2], [3]
from

(select [action_title], [institution_title], month([action_date]) as m, row_number() over (partition by [institution_title], month([action_date]) order by [action_date]) as rn
from [actions]) a

pivot (max([action_title]) for m in ([1], [2], [3])) pvt
order by [institution_title], rn 
16 окт 12, 11:54    [13325416]     Ответить | Цитировать Сообщить модератору
 Re: Сводная таблица  [new]
Felyeton
Member

Откуда:
Сообщений: 39
qwerty112,
Спасибо огромное!!!
16 окт 12, 12:37    [13325785]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить