SQL server Если по одному счетчику несколько флянцев вывести их в строку через запятую
Автор: drug | Категория: --- | Просмотров: 1561 | Комментирии: 0 | 27-11-2015 15:33
 SQL server Если по одному счетчику несколько  флянцев вывести их в строку через запятую
Выполнение без использования курсоров
 
 
declare @meter_flange table (id TIdentifier IDENTITY, meter_flange_id TIdentifier, flange_id TIdentifier)
  insert into @meter_flange
  select 
    meter_flange_id = mf.meter_flange_id,
    flange_id       = msf.flange_id 
  from dbo.meter_flange          as mf
    join dbo.meter_sensor_flange as msf on msf.meter_flange_id = mf.meter_flange_id
  order by meter_flange_id

declare @meter_flange_id TIdentifier, @flange_ids Varchar (max) =' ', @flange_id TIdentifier, @id TIdentifier
while exists (select 
                meter_flange_id = tmf.meter_flange_id,
                flange_id       = tmf.flange_id
              from @meter_flange as tmf)
begin 
  select top 1 
    @id = id,
    @meter_flange_id = tmf.meter_flange_id,
    @flange_id = tmf.flange_id
  from @meter_flange as tmf
                          
  set @flange_ids = @flange_ids + cast(@flange_id as Varchar)

  delete from @meter_flange where id = @id --meter_flange_id = @meter_flange_id and flange_id = @flange_id

  if @meter_flange_id >= (select top 1
                            meter_flange_id = tmf.meter_flange_id 
                          from @meter_flange as tmf)                         
    set @flange_ids = @flange_ids + ','

  declare @meter_flange1 table (meter_flange_id TIdentifier, flange_ids Varchar(max))
    insert into @meter_flange1 
    select 
      meter_flange_id = @meter_flange_id,
      flange_ids       = @flange_ids
    where @meter_flange_id < (select top 1
                                meter_flange_id = tmf.meter_flange_id 
                              from @meter_flange as tmf) 
  if @meter_flange_id < (select top 1
                           meter_flange_id = tmf.meter_flange_id 
                         from @meter_flange as tmf)                         
    set @flange_ids = ' '  
end
select * from @meter_flange1
select 
  meter_flange_id         = mf.meter_flange_id,
  equip_model_name        = em.equip_model_name,
  meter_sensor_date_begin = mf.meter_sensor_date_begin,
  meter_sensor_date_end   = mf.meter_sensor_date_end,
  flange_count            = count(msf.flange_id),
  meter_flanges           = dbo.list(cast(msf.flange_id as varchar))--,
--  meter_flanges1          = mf1.flange_ids
from dbo.meter_flange as mf
  join dbo.meter_sensor_flange as msf on msf.meter_flange_id = mf.meter_flange_id
  join dbo.meter_sensor        as ms on ms.meter_sensor_id = mf.meter_sensor_id
  join dbo.equipment           as e on e.equip_id = ms.meter_id
  join dbo.equipment_model     as em on em.equip_model_id = e.equip_model_id
--  join @meter_flange1          as mf1 on mf1.meter_flange_id = mf.meter_flange_id
group by mf.meter_flange_id, em.equip_model_name, mf.meter_sensor_date_begin, mf.meter_sensor_date_end,ms.meter_id--, mf1.flange_ids
order by meter_flange_id
Сочинения курсовыеСочинения курсовые