Visualizzazione dei risultati da 1 a 8 su 8

Visualizzazione discussione

  1. #6
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Caspita dopo avere finito di scrivere (con sudore) il codice
    faccio per postare e scopro che è ormai troppo tardi
    sono stato preceduto

    Comunque con la mia scarsità avrei fatto cosi (avendo letto anche il precedente thread )
    ( PS, dopo vado a "studiarmi" le proposte di sspintux e badaze )

    data questa tabella:
    codice:
    -- Uso Master
    USE [master]
    GO
    --    Creo un DB
    CREATE DATABASE [Test5]
    GO
    --   Uso il DB appena creato
    USE [Test5]
    GO
    --  Creo una tabella   T1   molto semplice senza Key o altro
    CREATE TABLE [dbo].[T1]
    ( 
     [Azi] [nvarchar](50) NULL,
     [Mat] [nvarchar](50) NULL 
    ) ON [PRIMARY]
    GO
    --  Inserisco i dati in tabella 
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'aaa', N'06')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'aaa', N'02')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'aaa', N'03')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'aaa', N'07')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'aaa', N'05')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'aaa', N'08')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'aaa', N'09')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'bbb', N'20')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'bbb', N'17')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'bbb', N'12')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'bbb', N'18')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'bbb', N'01')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'bbb', N'02')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'ccc', N'22')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'ccc', N'21')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'ccc', N'24')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'ddd', N'02')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'ddd', N'03')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'ddd', N'')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'ddd', N'01')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'ddd', N'07')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'ddd', N'08')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'ddd', N'04')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'eee', N'02')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'eee', NULL)
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'eee', N'07')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'eee', N'01')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'eee', N'12')
    GO
    INSERT [dbo].[T1] ([Azi], [Mat]) VALUES (N'eee', N'14')
    GO

    applico questa query

    codice:
    --   Uso Test5
    USE [Test5]
    GO
    WITH
     
    Vis1 AS
    (
    SELECT     
    Azi, Mat, 
    ROW_NUMBER() OVER (PARTITION BY Azi ORDER BY Mat) AS RN
    FROM dbo.T1
    ),
    Vis2 AS
    (
    SELECT TOP (100) PERCENT 
    Azi, Mat, RN
    FROM Vis1
    WHERE (RN < 5.5)
    ORDER BY Azi, Mat
    ),
    Vis3 AS
    (
    SELECT     
    Azi, 
    MAX(CASE WHEN RN = 1 THEN Mat END) AS e1, 
    MAX(CASE WHEN RN = 2 THEN Mat END) AS e2, 
    MAX(CASE WHEN RN = 3 THEN Mat END) AS e3, 
    MAX(CASE WHEN RN = 4 THEN Mat END) AS e4, 
    MAX(CASE WHEN RN = 5 THEN Mat END) AS e5
    FROM Vis2
    GROUP BY Azi
    ),
    Vis4 AS
    (
    SELECT     
    Azi, 
    (CASE WHEN (e1 IS NULL) THEN N'' ELSE e1 END) + (CASE WHEN (e2 IS NULL) THEN N'' ELSE (N'/' + e2) END) + (CASE WHEN (e3 IS NULL) THEN N'' ELSE (N'/' + e3) END) + (CASE WHEN (e4 IS NULL) THEN N'' ELSE (N'/' + e4) END) + (CASE WHEN (e5 IS NULL) THEN N'' ELSE (N'/' + e5) END) AS Res
    FROM Vis3
    )
    
    SELECT * FROM Vis4

    Osserva che se al campo "Mat" ( matricola ) hai dei valori NULL oppure stringhe a lunghezza zero questi ti occupano comunque i primi posti dei tuoi 5


    Pero concordo con zacca94 quando ti fa notare che sarebbe meglio spostare la query a lato applicazione.


    .
    Ultima modifica di nman; 07-12-2014 a 02:10

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.