Как создать сводную колонку? - PullRequest
0 голосов
/ 03 мая 2011

Вот мой текущий код SQL,

  select   
   coalesce(cast(machinename as varchar(28)), 'Grand Total:') as 'machinename', 
  (IsNull(cast(CRATE_SMALL / 60 as varchar(24)),'0') + ':' +  IsNull(cast(CRATE_SMALL % 60 as varchar(24)),'0') ) as '1001' ,
  (IsNull(cast(CRATE_MEDIUM / 60 as varchar(24)),'0') + ':' +  IsNull(cast(CRATE_MEDIUM % 60 as varchar(24)),'0'))as '1002',   
  (IsNull(cast(NO_SCHEDULE / 60 as varchar(24)),'0') + ':' +  IsNull(cast(NO_SCHEDULE % 60 as varchar(24)),'0'))   as '9999' 
     from    ( 
    select  machinename  ,   
    sum(case when vfrm.job_id = '1001' then DateDiff(mi, 0, total_time)  end) as  CRATE_SMALL ,       
    sum(case when vfrm.job_id = '1002' then DateDiff(mi, 0, total_time)  end) as  CRATE_MEDIUM ,       
     sum(case when vfrm.job_id = '9999' then DateDiff(mi, 0, total_time)  end) as  NO_SCHEDULE
    from    ven_fullreportmaster vfrm
             INNER JOIN ven_descriptionmaster VDM ON VDM.description_id = vfrm..description_id
                    inner join ven_machinemaster vm on  vm.machine_id = vfrm..machine_id
                      where  vfrm.entry_date = convert(varchar, getdate()-7, 105)  
                      and  vfrm.shift_id =1 
                      and vfrm.is_task_completed ='Y' 
    group by   machinename  with rollup
        ) as SubQueryALias 

вывод:

 machinename    1001    1002        9999

  ARISTECH    0:0      0:0        10:0

  FADAL    0:0     5:0        10:0

  Grand Total:  0:0   5:0   20:0

проблема:

в любом случае есть показать только столбец (ы)) значение которого больше нуля ... Итак, в приведенном выше примере я не хочу показывать имя столбца "1001".

Ответы [ 4 ]

2 голосов
/ 03 мая 2011

Честно говоря, вы не должны.Это проблема отображения, поэтому ее следует устранять, когда вы отображаете данные, а не извлекаете их из базы данных.Возможно, дайте больше информации о том, как вы отображаете данные, и кто-то может предоставить больше информации.

1 голос
/ 03 мая 2011

Чтобы добавить строку итогов, вам нужно взглянуть на ROLLUP часть предложения GROUP BY . Это может привести к подытогам, а также к общей сумме, в зависимости от ваших конечных требований.

Для скрытия столбца в tsql нет решения для этого - оператор SELECT всегда создает наборы результатов с одинаковой формой (имена и типы столбцов).

Но и то, и другое может лучше обслуживаться инструментом отчетности, если именно туда направляются эти данные (что, как я ожидаю, учитывая природу запроса). Инструменты отчетности, как правило, имеют лучшие возможности постобработки.

0 голосов
/ 03 мая 2011

как насчет использования временной таблицы для хранения запроса данных и последующего построения выходных данных из временной таблицы?

просто

1. {Ваш запрос на выборку} в #t {Ваш запрос откуда}

2.Выберите entry_date, machinename, [1001], [1002], [9999] из #t union выберите '' entry_date, 'total', sum ([1001]),sum ([1002]), sum ([9999]) из #t

логика более понятна с этими шагами, однако вы также можете использовать подобный подзапрос для получения того же результата

0 голосов
/ 03 мая 2011

попробуйте это:

select
    entry_date,  machinename, [1001], [1002], [9999], [1001]+[1002]+[9999] as Total
    FROM ( --your query here

         ) d
    WHERE [1001]+[1002]+[9999]>0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...