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

Откуда:
Сообщений: 680
Коллеги, подскажите, как написать запрос, который возвращал бы результат в таком виде (см. скриншот).
Вобщем, есть две таблички, предположим "Организации" и "Сотрудники".
Нужно чтобы запрос возвращал ячейки со структурой как на скриншоте.
Column1-Column4 - это информация из таблички "Организации", Column5-Column7 - из таблички "Сотрудники" (сотрудники, работающие в данной организации).

У меня из идей только такая:
Первый селект - возвращает строки только с данными по организации + данные по первому сотруднику
UNION
Второй селект - возвращает данные по сотрудникам, а колонки с данными по организации - подставляем NULL-ы
Сортируем все так, чтобы получилась структура.

В принципе, это сработает, но запрос будет громоздким.
Может кто-то подскажет более естественное решение?

К сообщению приложен файл. Размер - 19Kb
8 авг 13, 11:35    [14680077]     Ответить | Цитировать Сообщить модератору
 Re: Как написать такой зарпос (см. скриншот)  [new]
Big17
Member

Откуда:
Сообщений: 680
Небольшая неточность в скриншоте - там ООО "3", Адрес 3, ИНН 3 должно быть.... (копи-паст)
8 авг 13, 11:37    [14680087]     Ответить | Цитировать Сообщить модератору
 Re: Как написать такой зарпос (см. скриншот)  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
это делается на клиентской стороне, а не в запросе к реляционной базе.

смотрите в сторону разных гридов с объединением столбцов/колонок (в VB, например, есть MSHFlexGrid)
8 авг 13, 11:39    [14680104]     Ответить | Цитировать Сообщить модератору
 Re: Как написать такой зарпос (см. скриншот)  [new]
qwerty112
Guest
Big17,

пронумеровать записи с partition by по полям которые нужно скрыть,
и потом, во внешнем запросе
case when rn=1 then Поле end
8 авг 13, 11:39    [14680113]     Ответить | Цитировать Сообщить модератору
 Re: Как написать такой зарпос (см. скриншот)  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
да, визуальное представление информации это работа не для СУБД. А так пронумеруйте с помощью row_number() результирующее множество в разрезе фирмы. Для первых записей оставите Наименование и адрес фирмы, для остальных - не выводить. И в отчет выдавать отсортированным по фирме, номеру записи.
8 авг 13, 11:42    [14680136]     Ответить | Цитировать Сообщить модератору
 Re: Как написать такой зарпос (см. скриншот)  [new]
Big17
Member

Откуда:
Сообщений: 680
Мистер Хенки, qwerty112, спасибо!

По поводу визуального представления данных и где это делать. А почему бы это не сделать именно базе? Например, такие конструкии как CUBE, PIVOT, ROLLUP и т.д. возвращают данные далеко не в "чисто-табличном" виде. У меня схожая задача.
Имхо, к визуальщине это отношения не имеет.
8 авг 13, 11:51    [14680204]     Ответить | Цитировать Сообщить модератору
 Re: Как написать такой зарпос (см. скриншот)  [new]
Cygapb-007
Member

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

чисто для Excel - настройте условное форматирование на том, что уже есть: если значение ячейки равно значению предыдущей ячейки - отображать белым по белому. Плюс - можно будет сортировать данные в Excel
8 авг 13, 11:57    [14680245]     Ответить | Цитировать Сообщить модератору
 Re: Как написать такой зарпос (см. скриншот)  [new]
Big17
Member

Откуда:
Сообщений: 680
Коллеги, эксель здесь не при чем ) Я его использовал просто чтобы показать структуру
8 авг 13, 12:00    [14680280]     Ответить | Цитировать Сообщить модератору
 Re: Как написать такой зарпос (см. скриншот)  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
qwerty112
Big17,

пронумеровать записи с partition by по полям которые нужно скрыть,
и потом, во внешнем запросе
case when rn=1 then Поле end

поддерживаю вчера было
8 авг 13, 12:03    [14680304]     Ответить | Цитировать Сообщить модератору
 Re: Как написать такой зарпос (см. скриншот)  [new]
Glory
Member

Откуда:
Сообщений: 104751
Big17
Например, такие конструкии как CUBE, PIVOT, ROLLUP и т.д. возвращают данные далеко не в "чисто-табличном" виде. У меня схожая задача.

Ну так вы ищите встроенные конструкции для реализации ?
Так их нет
Придется писать "громоздкий запрос"
8 авг 13, 12:03    [14680306]     Ответить | Цитировать Сообщить модератору
 Re: Как написать такой зарпос (см. скриншот)  [new]
Big17
Member

Откуда:
Сообщений: 680
HandKot
qwerty112
Big17,

пронумеровать записи с partition by по полям которые нужно скрыть,
и потом, во внешнем запросе
case when rn=1 then Поле end

поддерживаю вчера было


Да, так и сделал.
Спасибо!
8 авг 13, 14:09    [14681205]     Ответить | Цитировать Сообщить модератору
 Re: Как написать такой зарпос (см. скриншот)  [new]
Big17
Member

Откуда:
Сообщений: 680
Теперь нужно сделать последовательную нумерацию в Column1 для "организаций"
8 авг 13, 14:09    [14681208]     Ответить | Цитировать Сообщить модератору
 Re: Как написать такой зарпос (см. скриншот)  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Big17
Теперь нужно сделать последовательную нумерацию в Column1 для "организаций"

dense_rank() over(order by организация)
8 авг 13, 14:13    [14681231]     Ответить | Цитировать Сообщить модератору
 Re: Как написать такой зарпос (см. скриншот)  [new]
Big17
Member

Откуда:
Сообщений: 680
Сделал с помощью DENSE_RANK()

Всем спасибо!
8 авг 13, 14:13    [14681232]     Ответить | Цитировать Сообщить модератору
 Re: Как написать такой зарпос (см. скриншот)  [new]
Zukora
Member

Откуда:
Сообщений: 535
Big17,
Дайте скрипт в студию. Кому-то пригодится.
8 авг 13, 23:36    [14684332]     Ответить | Цитировать Сообщить модератору
 Re: Как написать такой зарпос (см. скриншот)  [new]
Cygapb-007
Member

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

очень интересно – где будет использован такой запрос:)
Поделитесь?
8 авг 13, 23:48    [14684388]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить