Скрытие повторяющихся значений строк в Sql

#sql #sql-server #sql-server-2005 #sql-server-2008-r2 #sql-server-2012

#sql #sql-сервер #sql-server-2005 #sql-server-2008-r2 #sql-server-2012

Вопрос:

У меня есть таблица, подобная приведенной ниже

  UserName |  Fee  | ReferenceName | Billed 
 ----------------------------------------
 John        200     John            Yes
 Khalid      100     Chintu          No
 Khalid      100     Naga            Yes
 Khalid      100     Sudheer         Yes
 Sathish     200     aaaa            No
 Sathish     200     bbbb            Yes
 Suresh      100     cccc            Yes
  

Я хочу вывести, как показано ниже:

  UserName |  Fee  | ReferenceName | Billed 
 ----------------------------------------
 John        200     John            Yes
 Khalid      100     Chintu          No
                     Naga            Yes
                     Sudheer         Yes
 Sathish     200     aaaa            No
                     bbbb            Yes
 Suresh      100     cccc            Yes
  

Повторяющиеся имена не будут появляться во второй раз, здесь столбцы «Имя пользователя» и «Плата» являются повторяющимися столбцами..

Комментарии:

1. Вы можете попробовать использовать функцию ранга, а для записей, имеющих ранг> 1, вы можете скрыть поля с помощью оператора case .

Ответ №1:

Пожалуйста, попробуйте:

 select 
    case when RNum=1 then UserName else '' end UserName,
    case when RNum=1 then Fee else '' end Fee,
    ReferenceName,
    Billed 
from(
    select 
        *, 
        ROW_NUMBER() over (partition by UserName order by UserName) RNum 
    from tbl
)x
  

Ответ №2:

Может быть, вы можете попробовать это

 select 
    case when RANKK=1 then USERNAME else '' end USERNAME,
    case when RANKK=1 then FEE else '' end FEE,
    REFERENCENAME,
    BILLED 
from(
    select 
        A.*, 
        RANK over (partition by USERNAME,FEE order by USERNAME) AS RANKK 
    from MY_TABLE A
)x
  

Комментарии:

1. Спасибо @Nishanthi Grashia.