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

Откуда:
Сообщений: 237
У меня есть запрос двух связных таблиц. Который выдает результат что-то в виде
ФИО Телефон
Петров - 0971324215
Петов -0662534543
Петров -0994252353
Иванов - 09721243422
Иванов - 06621277422
Иванов - 09321663422

и т.д.

А можно как-то в запросе сделать нечто, чтобы выводило при повторении имени пустую строку? Что-то вроде

ФИО Телефон
Петров - 0971324215
'' -0662534543
'' -0994252353
Иванов - 09721243422
'' - 06621277422
'' - 09321663422

есть идеи ?
22 июл 13, 16:23    [14600011]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по группам  [new]
iap
Member

Откуда: Москва
Сообщений: 47051
DNShark,

CASE +ROW_NUMBER()OVER()
22 июл 13, 16:25    [14600025]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по группам  [new]
gang
Member

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

Как вариант еще можно поле в "телефон" склеить несколько номеров.
22 июл 13, 16:34    [14600066]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по группам  [new]
DNShark
Member

Откуда:
Сообщений: 237
Склеить вряд ли получиться. Там кроме телефона еще 7 полей. Плюс Доп информация. Поэтому клеить придется многовато. С Over пробую, но пока не получается (
22 июл 13, 16:48    [14600130]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по группам  [new]
iap
Member

Откуда: Москва
Сообщений: 47051
DNShark
Склеить вряд ли получиться. Там кроме телефона еще 7 полей. Плюс Доп информация. Поэтому клеить придется многовато. С Over пробую, но пока не получается (
При чём тут ещё 7 полей? Разве они мешают?
Если хотите внятных ответов, внятно оформите тему:
https://www.sql.ru/forum/127456/rekomendacii-po-oformleniu-soobshheniy-v-forume
22 июл 13, 16:59    [14600193]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по группам  [new]
Добрый Э - Эх
Guest
DNShark,

На MS SQL Server 2012 помимо row_number-а можно ещё LEAD / LAG использовать в этих целях.
23 июл 13, 04:22    [14601930]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по группам  [new]
=)8)
Guest
DNShark,

Выгружать в Excel «как есть», а уже в нем включать условное форматирование, вроде этого: «если значение равно значению из предыдущей строки этого же столбца, то отображать его белым по белому»
23 июл 13, 10:06    [14602451]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по группам  [new]
DNShark
Member

Откуда:
Сообщений: 237
Всем большое спасибо
23 июл 13, 11:40    [14603003]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по группам  [new]
DNShark
Member

Откуда:
Сообщений: 237
Получилось что-то типа

case Row_Number() over (Partition by [ФИО] order by [ФИО] )
when 1 then [Responsible_id]
else ''
end
23 июл 13, 12:06    [14603224]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по группам  [new]
iap
Member

Откуда: Москва
Сообщений: 47051
DNShark
Получилось что-то типа

case Row_Number() over (Partition by [ФИО] order by [ФИО] )
when 1 then [Responsible_id]
else ''
end
Да. Всё правильно. :)
23 июл 13, 12:14    [14603288]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по группам  [new]
DNShark
Member

Откуда:
Сообщений: 237
эх, вернул тестировщик, сказали что в 2000 ms-sql не работает(
6 авг 13, 17:47    [14671412]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по группам  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
DNShark, тогда, думаю, вам стоит заглянуть сюда: https://www.sql.ru/faq/faq_topic.aspx?fid=126
6 авг 13, 18:14    [14671600]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по группам  [new]
DNShark
Member

Откуда:
Сообщений: 237
В общем получилась вот такая фня...

+
if object_id('#ResponsiblesTemp','U') is not NULL
drop table #ResponsiblesTemp;

SELECT rownumber = IDENTITY(INT,1,1), Groups.Group_ as ForGroupSort,'GroupName' + Cast(Groups.Group_ as varchar) +': '+ Groups.Message as ForGroupName,Responsible_Number,Cast(Groups.Group_ as varchar) + Responsible_Name as rrr,Responsible_Name,TypeTel,PhoneNo,[ResponsibleTel].[Description]
INTO #ResponsiblesTemp
FROM Groups,Responsibles
Left Join ResponsibleTel on ResponsibleTel.Responsible_id=Responsibles.Responsible_id
INNER JOIN ResponsibleTypeTel on ResponsibleTypeTel.TypeTel_id = ResponsibleTel.TypeTel_id
where Responsibles.panel_id=Groups.Panel_id and Responsibles.Group_ = Groups.Group_ and Groups.Panel_id='0006' Order By ForGroupSort

SELECT *, case (
SELECT COUNT(Responsible_Name)
FROM #ResponsiblesTemp AS counter
WHERE counter.rrr = #ResponsiblesTemp.rrr
AND counter.RowNumber <= #ResponsiblesTemp.RowNumber
) when 1 then Responsible_Name else '' end as ResponsibleName_WithoutRepeat
FROM #ResponsiblesTemp

drop table #ResponsiblesTemp;


в ResponsibleName_WithoutRepeat получилось то что нужно
6 авг 13, 18:29    [14671673]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по группам  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
DNShark,

результирующий запрос без oder by ?
7 авг 13, 11:36    [14674616]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по группам  [new]
DNShark
Member

Откуда:
Сообщений: 237
Есть там ордер by, просто я ж во временную таблицу вставляю отсортированные данные по ForGroupSort, а потом просто отображаю их меняя значения имени с 1 на пустое.
7 авг 13, 11:42    [14674678]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по группам  [new]
DNShark
Member

Откуда:
Сообщений: 237
хотя почему-то

if object_id('#ResponsiblesTemp','U') is not NULL
drop table #ResponsiblesTemp;


не работает

и это тоже

if exists (select * from sys.tables where name = '#ResponsiblesTemp') ';
     drop table #ResponsiblesTemp


не работает

в итоге я еще заменил #ResponsiblesTemp на ResponsiblesTemp , хотя странно но это работает

if exists (select * from sys.tables where name = 'ResponsiblesTemp') ';
     drop table ResponsiblesTemp
7 авг 13, 11:46    [14674740]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по группам  [new]
Гость333
Member

Откуда:
Сообщений: 3683
DNShark
хотя почему-то

if object_id('#ResponsiblesTemp','U') is not NULL
drop table #ResponsiblesTemp;


не работает

Потому что надо так:
if object_id('tempdb..#ResponsiblesTemp','U') is not NULL
drop table #ResponsiblesTemp;


DNShark
в итоге я еще заменил #ResponsiblesTemp на ResponsiblesTemp

Срочно меняйте обратно, пока никто не увидел.
7 авг 13, 11:53    [14674825]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по группам  [new]
DNShark
Member

Откуда:
Сообщений: 237
Спасибо большое)
7 авг 13, 12:21    [14675037]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по группам  [new]
DNShark
Member

Откуда:
Сообщений: 237
а

if object_id('tempdb..#ResponsiblesTemp','U') is not NULL
drop table #ResponsiblesTemp;


в Sql 2000 работает?
7 авг 13, 13:33    [14675555]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по группам  [new]
iap
Member

Откуда: Москва
Сообщений: 47051
DNShark
а

if object_id('tempdb..#ResponsiblesTemp','U') is not NULL
drop table #ResponsiblesTemp;



в Sql 2000 работает?
Да
7 авг 13, 13:45    [14675634]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по группам  [new]
iap
Member

Откуда: Москва
Сообщений: 47051
iap
DNShark
а

if object_id('tempdb..#ResponsiblesTemp','U') is not NULL
drop table #ResponsiblesTemp;




в Sql 2000 работает?
Да
В крайнем случае уберите 'U'.
Не могу вспомнить, как там с типом объекта.
Но, кажется мне, что прокатит.
7 авг 13, 13:47    [14675646]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по группам  [new]
Glory
Member

Откуда:
Сообщений: 104760
iap
В крайнем случае уберите 'U'.
Не могу вспомнить, как там с типом объекта.

Это параметер был. Просто не был документированным
7 авг 13, 13:48    [14675658]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по группам  [new]
iap
Member

Откуда: Москва
Сообщений: 47051
Glory
iap
В крайнем случае уберите 'U'.
Не могу вспомнить, как там с типом объекта.

Это параметер был. Просто не был документированным
Спасибо!
Ко мне возвращается память!
7 авг 13, 13:52    [14675680]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по группам  [new]
DNShark
Member

Откуда:
Сообщений: 237
Забавно в Delphi

if exists (select * from tempdb.dbo.sysobjects where name=''#ResponsiblesTemp'' ) ';;
    DataBase.StringList.Add(' drop table #ResponsiblesTemp;


проходит, а в managment studio нет там что-то похожее на

if exists (select * from tempdb.dbo.sysobjects where name Like '%#ResponsiblesTemp%' )


писать надо, или я чего-то не знаю...
7 авг 13, 13:56    [14675708]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по группам  [new]
iap
Member

Откуда: Москва
Сообщений: 47051
DNShark
Забавно в Delphi

if exists (select * from tempdb.dbo.sysobjects where name=''#ResponsiblesTemp'' ) ';;
 DataBase.StringList.Add(' drop table #ResponsiblesTemp;



проходит, а в managment studio нет там что-то похожее на

if exists (select * from tempdb.dbo.sysobjects where name Like '%#ResponsiblesTemp%' )



писать надо, или я чего-то не знаю...
Надо смотреть профайлером что на сервер приходит.
И всё станет ясно.
7 авг 13, 14:00    [14675729]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить