2016-08-22 2 views
1

Ich habe ein Ergebnis von Tabellen ähnlich wie diese:ausblenden die gleichen Zellen in SQL Server Ergebnis

id | name | type 
---+------+------ 
1 | John | 1 
1 | John | 34 
2 | Jane | 2 
1 | John | 12 
2 | Jane | 168 

Ich muss wiederholt Werte verbergen und nur eindeutige Werte lassen. Ich muss etwas wie das bekommen

id | name | type 
---+------+------ 
1 | John | 1 
    |  | 34 
    |  | 12 
2 | Jane | 2 
    |  | 168 

Wie kann ich das in SQL Server 2012 tun?

+1

In SQL können Sie Spalte Wert nicht ausblenden –

+0

Das ist etwas Ihre ** UI ** (Berichts-Engine , Webseite) sollte umgehen - * nicht * SQL Server! –

+0

Ich weiß, ich bin in der Lage, das in Visual Studio zu tun, aber ich habe eine Anfrage von Chef, es in SQL Server zu tun ... so gibt es keine Möglichkeit, wie es in SQL Server zu tun? – MegoSoft

Antwort

1

Dies ist etwas, das Ihre Präsentationsschicht sollte im Allgemeinen zu handhaben, aber ...

WITH T AS 
(
    SELECT 
     *, 
     ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name, Type) AS RN1, 
     ROW_NUMBER() OVER (PARTITION BY ID, Name ORDER BY Type) AS RN2 
    FROM YourTable 
) 
SELECT 
     CASE WHEN RN1 = 1 THEN ID END AS ID, 
     CASE WHEN RN2 = 1 THEN Name END AS Name, 
     Type 
FROM T 
ORDER BY ID, Name, Type 
+0

Bitte lesen Sie die Frage richtig, OP möchte Spaltenwert ausblenden und es ist nicht möglich in SQL –

+0

@Sandip macht es Null wird in Ordnung, ich bin mir sicher. Es ist nicht nötig, pedantisch zu sein und es auf eine Interpretation zu beschränken, die es unmöglich machen würde. –

+0

lassen Sie uns OP zufrieden oder nicht sehen. Viel Glück –

0

Wenn Sie zunichte machen markierte Zeilen benötigen, können Sie Abfrage nach der Anwendung:

WITH Src AS 
(
    SELECT * FROM (VALUES 
     (1, 'John', 1 ), 
     (1, 'John', 34), 
     (2, 'Jane', 2 ), 
     (1, 'John', 12), 
     (2, 'Jane', 168) 
    )T(id, name, [type]) 
) 
SELECT 
    CASE WHEN RN=1 THEN id END id, 
    CASE WHEN RN=1 THEN name END name, 
    [Type] 
FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY id, name ORDER BY [Type]) RN FROM Src) T 

Es gibt:

id   name Type 
----------- ---- ----------- 
1   John 1 
NULL  NULL 12 
NULL  NULL 34 
2   Jane 2 
NULL  NULL 168 
Verwandte Themen