Vous pouvez vérifier cette méthode mais les mêmes données.
declare @mytable table (compid int,compname varchar(20),itemid int, itemdesc varchar(20))
insert into @mytable
values
(1,'Company A',100,'Nestle'),
(1,'Company A',200,'UniLever'),
(2,'Company B',300,'Citrix'),
(2,'Company B',400,'SQL'),
(2,'Company B',500,'Oracle'),
(1,'Company B',600,'Microsoft')
select
iif(left(m1.ord_id,1)>1,NULL,m.compid) [CompID],
iif(left(m1.ord_id,1)>1,NULL,m.compname) [CompName],
m.itemid,
m.itemdesc
from @mytable m
inner join (
select distinct compid,row_number() over (partition by compid order by itemid) [ord_id], itemid
from @mytable) m1
on m.compid = m1.compid and m.itemid = m1.itemid
ou CTE
;with cte as
(
select distinct compid,row_number() over (partition by compid order by itemid) [ord_id], itemid
from @mytable
)
select
iif(left(m1.ord_id,1)>1,NULL,m.compid) [CompID],
iif(left(m1.ord_id,1)>1,NULL,m.compname) [CompName],
m.itemid,
m.itemdesc
from @mytable m
inner join cte m1
on m.compid = m1.compid and m.itemid = m1.itemid
si vous n'êtes pas satisfait de nulls remplacent les champs
iif(left(m1.ord_id,1)>1,'',cast(m.compid as varchar)) [CompID],
iif(left(m1.ord_id,1)>1,'',m.compname) [CompName],
Résultat
CompID CompName itemid itemdesc
1 Company A 100 Nestle
200 UniLever
600 Microsoft
2 Company B 300 Citrix
400 SQL
500 Oracle
ou cet équivalent en entityframework –
Vous confondez données wi le rendu d'affichage. Le rendu que vous voyez dans l'onglet Résultats de SSMS n'est pas ce que l'utilisateur final devrait voir (à moins que vous envisagiez de modéliser votre application pour ressembler à SSMS) ... Vouloir forcer la base de données à faire le travail normalement réservé à l'application, causera seulement du chagrin une fois que vous arrivez à l'application. –