Показывать только 1 раз чужеземный ключ

моя проблема - следующая, у меня есть 2 подмостков названная КАТЕГОРИИ и другой так называемый PUNTUADORES, главным образом первая - как будто это были мои вопросы и вторая как будто это были ответы (говоря о маленькой системе опросов), вопрос состоит в том, что я имею чужеземный ключ КАТЕГОРИЙ по отношению к PUNTUADORES, в чем я нуждаюсь, состоит, в том, чтобы сделав мою консультацию, не повторились стоимость КАТЕГОРИЙ, которые они только появлялись бы однажды.

Это моя консультация

select c.CATEGORIA,p.IDPUNTUADOR,p.NOMBRE,p.DESCRIPCION,p.PUNTOS
from categorias as c 
join puntuadores as p on c.IDCATEGORIA = p.IDCATEGORIA

Это мой результат, в котором я хочу, чтобы явная колонна явилась 1 единственным разом и не столькой. introducir la descripción de la imagen aquí

То, что я нуждаюсь себе получать, так это это:

introducir la descripción de la imagen aquí

Только, который остальные поля после КАТЕГОРИИ, я не хочу так приложенные, а один Ваш из-за ячейки, но только 1 раза КАТЕГОРИИ и не столькие как в предыдущей.

Это результат, который у меня есть в этом моменте, она первый колонна - та, которую я не хочу, что он повторился, только, что явился 1 разом. introducir la descripción de la imagen aquí

1
задан 20.03.2019, 17:25
2 ответа

Чтобы добиваться того, что ты хочешь, ты можешь стоить себе ее funciГіn analГ-костариканская LAG (доступный начиная с SQL Server 2012). С этой funciГіn, ты можешь видеть стоимость любой из предыдущих линий, в этом случае, мы будем сравнивать стоимость ее categorГ - в настоящей линии с нею categorГ - в предыдущей линии, если он отличается, возвратим ее categorГ - в, и если он равен, возвратим цепь vacГ - в. С этим, добиваемся эффекта из печатать каждый categorГ - в единственном разе.

Звучит mГЎs осложненный, которого это:

with
Categorias as (
          select 1 idCategoria, 'Coordinación' Categoria
union all select 2, 'Precisión'
union all select 3, 'Esfuerzo'
)
,
Puntuadores as (
          select  5 idPuntuador, 1 idCategoria, 'Muy leve' Nombre, 'Descripcion 5' Descripcion, 2 Puntos
union all select  6, 1, 'Leve',         'Descripcion 6',   7
union all select  7, 1, 'Promedio',     'Descripcion 7',  13
union all select  8, 1, 'Considerable', 'Descripcion 8',  18
union all select  9, 1, 'Extremo',      'Descripcion 9',  25
union all select 10, 2, 'Suelto',       'Descripcion 10',  8
union all select 11, 2, 'Cerca',        'Descripcion 11', 10
union all select 12, 2, 'Apretado',     'Descripcion 12', 16
union all select 13, 2, 'Exacto',       'Descripcion 13', 22
union all select 14, 3, 'Poco o leve',  'Descripcion 14',  2
union all select 15, 3, 'Promedio',     'Descripcion 15',  4
union all select 16, 3, 'Apreciable',   'Descripcion 16',  6
)
select   case 
           when c.Categoria = coalesce(lag(c.Categoria) over (order by c.Categoria, p.idPuntuador), 'n/a') then ''
           else c.Categoria
         end Categoria
       , p.idPuntuador
       , p.Nombre
       , p.Descripcion
       , p.Puntos
  from Categorias as c
       inner join Puntuadores p on p.idCategoria = c.idCategoria
 order by c.Categoria, p.idPuntuador

, Что производит следующий результат:

Categoria    idPuntuador Nombre       Descripcion    Puntos
------------ ----------- ------------ -------------- -----------
Coordinación 5           Muy leve     Descripcion 5  2
             6           Leve         Descripcion 6  7
             7           Promedio     Descripcion 7  13
             8           Considerable Descripcion 8  18
             9           Extremo      Descripcion 9  25
Esfuerzo     14          Poco o leve  Descripcion 14 2
             15          Promedio     Descripcion 15 4
             16          Apreciable   Descripcion 16 6
Precisión    10          Suelto       Descripcion 10 8
             11          Cerca        Descripcion 11 10
             12          Apretado     Descripcion 12 16
             13          Exacto       Descripcion 13 22

(12 rows affected)

В детали:

  • lag(c.Categoria) over (order by c.Categoria, p.idPuntuador) возвращает нам стоимость колонны Categoría в предыдущей линии, упорядоченной c.Categoría и idPuntuador
  • coalesce (), если стоимость предыдущей линии - null (вещь, которая происходит в первой линии, так как нет предыдущей линии), возвращает нам 'n/a'. Если он не null, он возвращает нам стоимость колонны в предыдущей линии.
  • мы сравниваем эту стоимость со стоимостью c.Categoria в настоящей линии. Если он равен, мы возвращаем ''. Если он не равен, мы возвращаем c.Categoria
1
ответ дан 02.12.2019, 05:22
  • 1
    спасибо, я протестирую, что ты упоминаешь обо мне, оно может функционировать, хотя будучи искренними, он мне кажется немного сложным. – Jesus Alejandro Nuñez Jaimez 20.03.2019, 18:19
  • 2
    ¿ Осложненный? ¿ в qué сложное чувство? – jachguate 20.03.2019, 18:50

Важно понимать, что каждая линия - независимая организация от другой. Следовательно, не возможно удалять стоимость линии и надеяться, что он присоединяется к другой.

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

  • В докладе, в общем определяют группы и каждую группу tendrГЎ глава рода где aparecerГЎ информация, которую ты не хочешь, чтобы он повторился.
  • В одной aplicaciГіn, в общем mostrarГЎs поле, повторенное в поле текста, согнуло, приклей этикетку или любой объект для стоимости ты взберешься, в то время как данные, которые varГ-an могут идти в grid или в объекте, который менял бы Вашу стоимость в зависимости от отборной стоимости, в этом случае, для поля CategorГ - В.
0
ответ дан 02.12.2019, 05:22

Теги

Похожие вопросы