2017-10-11 1 views
-1
ALTER PROCEDURE [dbo].[spGetItemCategories] 
AS 
BEGIN 
    SET NOCOUNT ON; 
    --SELECT * FROM ItemCategories 

    SELECT 
     IC.Id, IC.Name ,C.Id AS CompanyId, C.Name AS CompanName 
    FROM 
     ItemCategories IC 
    JOIN 
     CompanyItems CI ON IC.Id = CI.ItemCategoryId 
    JOIN 
     Companies C ON CI.CompanyId = C.Id 
    --WHERE CI.CompanyId IN (SELECT TOP(100)* FROM Companies C) 
END 

Diese zeigt Daten wie fusionieren:Wie Liste von SQL Server gespeicherte Prozedur

4 sdfs 14 Nestle 
4 sdfs 15 Unilever 

aber ich möchte, wie diese zu bekommen:

4 sdfs 14 Nestle 
      15 Unilever 

check image for code

+0

oder das Äquivalent in EntityFramework –

+1

Du verwechselst Daten wi th Anzeige Rendern. Das Rendering, das Sie auf der Registerkarte "Ergebnisse" von SSMS sehen, ist nicht das, was der Endbenutzer sehen sollte (es sei denn, Sie möchten Ihre Anwendung wie SSMS aussehen lassen) ... Erzwingen, dass die Datenbank den normalerweise für die Anwendung reservierten Job ausführt wird nur Kummer verursachen, sobald du zur Anwendung kommst. –

Antwort

-1

Sie können prüfen, diese Methode aber die gleichen Daten.

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 

oder 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 

, wenn Sie mit NULL-Werte nicht zufrieden sind, ersetzen die Felder

iif(left(m1.ord_id,1)>1,'',cast(m.compid as varchar)) [CompID], 
iif(left(m1.ord_id,1)>1,'',m.compname) [CompName], 

Ergebnis

CompID CompName itemid itemdesc 
1  Company A 100  Nestle 
        200  UniLever 
        600  Microsoft 
2  Company B 300  Citrix 
        400  SQL 
        500  Oracle 
+0

Sie durchlaufen viele Schritte für die bloße Präsentation. Aus Datenbanksicht ist das SQL des OP korrekt. Ich würde sagen, sie müssen den Unterschied zwischen Präsentation und Daten erkennen. NULL ist nicht die Lösung IMO. Stimmst du nicht zu? – smoore4

+0

Warum erstellen Sie nicht Ihre Lösung @ smoore4 und lassen Sie mich der Richter sein. wie ist das? – maSTAShuFu

+0

NULL ist nur ein Ergebnis von SQL, Sie können es immer neu formatieren ... es ist nur ein Konzept, dass es eine Lösung gibt. – maSTAShuFu

Verwandte Themen