sql >> Database teknologi >  >> RDS >> Sqlserver

viser tomme felter til gentagelse af værdier i et resultatsæt

Indpak din eksisterende forespørgsel i CTE ved at tilføje ROW_NUMBER OVER PARTITION BY dine kolonner, som vil skabe RN'er for hver gruppe af værdier. I den ydre forespørgsel skal du bare bruge CASE til at vælge værdier, hvor GRP_RN =1 og tom streng ellers.

WITH CTE AS 
(
    Select  distinct top 100000 
        o.EventSetName,       
        o.EventSetDisplay,
        o.EventSetDescription,
        o.ChildSetName,
        ROW_NUMBER() Over (Order By f.ChildSetName) RN,
        f.DocumentDispSequence,
        f.SectionDispSequence,
        o.ObsSetDispSequence,
        null  as NullColumnNeedsName,
        ROW_NUMBER() OVER (PARTITION BY o.EventSetName, o.EventSetDisplay,o.EventSetDescription ORDER BY f.ChildSetName) GRP_RN
    From   ##ObsSetLevel o,
    INNER JOIN ##Final f ON f.ChildSetName = o.EventSetName and o.EventSetName = @variableName
)
SELECT
    CASE WHEN GRP_RN = 1 THEN o.EventSetName ELSE '' AS EventSetName,
    CASE WHEN GRP_RN = 1 THEN o.EventSetDisplay ELSE '' AS EventSetDisplay,
    CASE WHEN GRP_RN = 1 THEN o.EventSetDescription ELSE '' AS EventSetDescription,
    other columns
FROM CTE  
Order By RN asc, DocumentDispSequence asc, SectionDispSequence asc, o.ObsSetDispSequence asc

PS:Jeg har også rettet din brug af old-style joins. Denne brug er forældet for mere end 20 år siden med introduktionen af ​​SQL-92-standarder. Du bør undgå at bruge dem.




  1. EF 5 med oracle edmx StoreGeneratedPattern=Identitetsproblem

  2. Indsæt data, hvis antallet af rækker er større end 0, virker ikke

  3. Hvordan finder man ud af, om der findes en funktion i PostgreSQL?

  4. ORA-00054:ressource optaget og anskaffelse med NOWAIT angivet eller timeout udløbet