PIVOTing в MS SQL для вывода таблицы склонения

Aug 16, 2015 11:25

Так как каждая словоформа хранится в SQL словаре в виде отдельной записи, то по умолчанию получается такая выбора форм существительных:

select F.name, LTRIM(RTRIM(P.str_pairs))
 from sg_entry E, sg_class C, sg_form F, coord_pairs P
 where E.name like 'кош%'
       and C.id=E.id_class
       and C.name='существительное' COLLATE Cyrillic_General_CI_AS
       and F.id_entry=E.id
       and P.id=F.id_dims



кошак
ЧИСЛО:ЕД ПАДЕЖ:ИМ

кошака
ЧИСЛО:ЕД ПАДЕЖ:РОД

кошаком
ЧИСЛО:ЕД ПАДЕЖ:ТВОР

кошака
ЧИСЛО:ЕД ПАДЕЖ:ВИН

кошаку
ЧИСЛО:ЕД ПАДЕЖ:ДАТ

кошаке
ЧИСЛО:ЕД ПАДЕЖ:ПРЕДЛ

кошаки
ЧИСЛО:МН ПАДЕЖ:ИМ

кошаков
ЧИСЛО:МН ПАДЕЖ:РОД

кошаками
ЧИСЛО:МН ПАДЕЖ:ТВОР

кошаков
ЧИСЛО:МН ПАДЕЖ:ВИН

кошакам
ЧИСЛО:МН ПАДЕЖ:ДАТ

кошаках
ЧИСЛО:МН ПАДЕЖ:ПРЕДЛ

кошатник
ЧИСЛО:ЕД ПАДЕЖ:ИМ

кошатника
ЧИСЛО:ЕД ПАДЕЖ:РОД

кошатником
ЧИСЛО:ЕД ПАДЕЖ:ТВОР

кошатника
ЧИСЛО:ЕД ПАДЕЖ:ВИН

кошатнику
ЧИСЛО:ЕД ПАДЕЖ:ДАТ

кошатнике
ЧИСЛО:ЕД ПАДЕЖ:ПРЕДЛ

кошатники
ЧИСЛО:МН ПАДЕЖ:ИМ

кошатников
ЧИСЛО:МН ПАДЕЖ:РОД

кошатниками
ЧИСЛО:МН ПАДЕЖ:ТВОР

кошатников
ЧИСЛО:МН ПАДЕЖ:ВИН

кошатникам
ЧИСЛО:МН ПАДЕЖ:ДАТ

кошатниках
ЧИСЛО:МН ПАДЕЖ:ПРЕДЛ

кошатница
ЧИСЛО:ЕД ПАДЕЖ:ИМ

кошатницы
ЧИСЛО:МН ПАДЕЖ:ИМ

кошатницы
ЧИСЛО:ЕД ПАДЕЖ:РОД

кошатниц
ЧИСЛО:МН ПАДЕЖ:РОД

кошатницей
ЧИСЛО:ЕД ПАДЕЖ:ТВОР

кошатницами
ЧИСЛО:МН ПАДЕЖ:ТВОР

А если захотелось странного - вывести все формы каждого существительного в одну строку?
Самое простое - сделать пользовательскую функцию, возвращающую заданную форму заданного слова.
А если создавать функции для получения заданной падежной формы нежелательно?
Тогда можно написать вот такой запросец с использованием забавного ms-specific оператора PIVOT:

select EntryName, [ЧИСЛО:ЕД ПАДЕЖ:ИМ], [ЧИСЛО:ЕД ПАДЕЖ:ЗВАТ], [ЧИСЛО:ЕД ПАДЕЖ:ВИН], [ЧИСЛО:ЕД ПАДЕЖ:РОД],
      [ЧИСЛО:ЕД ПАДЕЖ:ДАТ], [ЧИСЛО:ЕД ПАДЕЖ:ТВОР], [ЧИСЛО:ЕД ПАДЕЖ:ПРЕДЛ], [ЧИСЛО:ЕД ПАДЕЖ:МЕСТ],
      [ЧИСЛО:ЕД ПАДЕЖ:ПАРТ], [ЧИСЛО:ЕД ПАДЕЖ:СЧЕТН], [ЧИСЛО:МН ПАДЕЖ:ИМ], [ЧИСЛО:МН ПАДЕЖ:ВИН],
      [ЧИСЛО:МН ПАДЕЖ:РОД], [ЧИСЛО:МН ПАДЕЖ:ДАТ], [ЧИСЛО:МН ПАДЕЖ:ТВОР], [ЧИСЛО:МН ПАДЕЖ:ПРЕДЛ]
from
(
 select E.name as EntryName, F.name as Form, RTRIM(LTRIM(P.str_pairs)) as Tags
  from sg_entry E, sg_class C, sg_form F, coord_pairs P
  where E.name like 'кош%' COLLATE Cyrillic_General_CI_AS
        and C.id=E.id_class
        and C.name='существительное' COLLATE Cyrillic_General_CI_AS
        and F.id_entry=E.id
        and P.id=F.id_dims
) as F
PIVOT
(
 MAX(F.Form)
 FOR F.Tags IN ( [ЧИСЛО:ЕД ПАДЕЖ:ИМ], [ЧИСЛО:ЕД ПАДЕЖ:ЗВАТ], [ЧИСЛО:ЕД ПАДЕЖ:ВИН], [ЧИСЛО:ЕД ПАДЕЖ:РОД],
  [ЧИСЛО:ЕД ПАДЕЖ:ДАТ], [ЧИСЛО:ЕД ПАДЕЖ:ТВОР], [ЧИСЛО:ЕД ПАДЕЖ:ПРЕДЛ], [ЧИСЛО:ЕД ПАДЕЖ:МЕСТ],
  [ЧИСЛО:ЕД ПАДЕЖ:ПАРТ], [ЧИСЛО:ЕД ПАДЕЖ:СЧЕТН], [ЧИСЛО:МН ПАДЕЖ:ИМ], [ЧИСЛО:МН ПАДЕЖ:ВИН],
  [ЧИСЛО:МН ПАДЕЖ:РОД], [ЧИСЛО:МН ПАДЕЖ:ДАТ], [ЧИСЛО:МН ПАДЕЖ:ТВОР], [ЧИСЛО:МН ПАДЕЖ:ПРЕДЛ] )
) T

Результат (первый столбец - словарная форма, далее падежные формы для единственного и множественного числа):



кошак
кошак
NULL
кошака
кошака
кошаку
кошаком
кошаке
NULL
NULL
NULL
кошаки
кошаков
кошаков
кошакам
кошаками
кошаках

кошатник
кошатник
NULL
кошатника
кошатника
кошатнику
кошатником
кошатнике
NULL
NULL
NULL
кошатники
кошатников
кошатников
кошатникам
кошатниками
кошатниках

кошатница
кошатница
NULL
кошатницу
кошатницы
кошатнице
кошатницею
кошатнице
NULL
NULL
NULL
кошатницы
кошатниц
кошатниц
кошатницам
кошатницами
кошатницах

Кошелев
Кошелев
NULL
Кошелева
Кошелева
Кошелеву
Кошелевым
Кошелеве
NULL
NULL
NULL
Кошелевы
Кошелевых
Кошелевых
Кошелевым
Кошелевыми
Кошелевых

Кошелева
Кошелева
NULL
Кошелеву
Кошелевой
Кошелевой
Кошелевой
Кошелевой
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL

кошелек
кошелек
NULL
кошелек
кошелька
кошельку
кошельком
кошельке
NULL
NULL
NULL
кошельки
кошельки
кошельков
кошелькам
кошельками
кошельках

кошелечек
кошелечек
NULL
кошелечек
кошелечка
кошелечку
кошелечком
кошелечке
NULL
NULL
NULL
кошелечки
кошелечки
кошелечков
кошелечкам
кошелечками
кошелечках

кошелка
кошелка
NULL
кошелку
кошелки
кошелке
кошелкою
кошелке
NULL
NULL
NULL
кошелки
кошелки
кошелок
кошелкам
кошелками
кошелках

кошелочка
кошелочка
NULL
кошелочку
кошелочки
кошелочке
кошелочкою
кошелочке
NULL
NULL
NULL
кошелочки
кошелочки
кошелочек
кошелочкам
кошелочками
кошелочках

кошель
кошель
NULL
кошель
кошеля
кошелю
кошелем
кошеле
NULL
NULL
NULL
кошели
кошели
кошелей
кошелям
кошелями
кошелях

кошениль
кошениль
NULL
кошениль
кошенили
кошенили
кошенилью
кошенили
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL

кошерность
кошерность
NULL
кошерность
кошерности
кошерности
кошерностью
кошерности
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL

кошечка
кошечка
NULL
кошечку
кошечки
кошечке
кошечкою
кошечке
NULL
NULL
NULL
кошечки
кошечек
кошечек
кошечкам
кошечками
кошечках

Кошечкин
Кошечкин
NULL
Кошечкина
Кошечкина
Кошечкину
Кошечкиным
Кошечкине
NULL
NULL
NULL
Кошечкины
Кошечкиных
Кошечкиных
Кошечкиным
Кошечкиными
Кошечкиных

Кошечкина
Кошечкина
NULL
Кошечкину
Кошечкиной
Кошечкиной
Кошечкиной
Кошечкиной
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL

кошка
кошка
NULL
кошку
кошки
кошке
кошкою
кошке
NULL
NULL
NULL
кошки
кошек
кошек
кошкам
кошками
кошках

Кошков
Кошков
NULL
Кошкова
Кошкова
Кошкову
Кошковым
Кошкове
NULL
NULL
NULL
Кошковы
Кошковых
Кошковых
Кошковым
Кошковыми
Кошковых

Кошкова
Кошкова
NULL
Кошкову
Кошковой
Кошковой
Кошковой
Кошковой
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL

кошмар
кошмар
NULL
кошмар
кошмара
кошмару
кошмаром
кошмаре
NULL
NULL
NULL
кошмары
кошмары
кошмаров
кошмарам
кошмарами
кошмарах

кошмарик
кошмарик
NULL
кошмарик
кошмарика
кошмарику
кошмариком
кошмарике
NULL
NULL
NULL
кошмарики
кошмарики
кошмариков
кошмарикам
кошмариками
кошмариках

кошмарность
кошмарность
NULL
кошмарность
кошмарности
кошмарности
кошмарностью
кошмарности
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL

Кошурников
Кошурников
NULL
Кошурникова
Кошурникова
Кошурникову
Кошурниковым
Кошурникове
NULL
NULL
NULL
Кошурниковы
Кошурниковых
Кошурниковых
Кошурниковым
Кошурниковыми
Кошурниковых

Кошурникова
Кошурникова
NULL
Кошурникову
Кошурниковой
Кошурниковой
Кошурниковой
Кошурниковой
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL

SQL словарь, СУБД, ms sql, существительное, sql

Previous post Next post
Up