none
Come estrarre una precisa sequenza di valori da una tabella RRS feed

  • Domanda

  • Salve Ragazzi 

    vorrei sapere se c'e un sistema per estrarre una precisa sequenza di valori da una tabella.

    Ho inserito una sequenza di dati il risultato che vorrei ottenere sarebbe IDPROFILE 1

    Passando una sequenza di valori esempio '1,2,3,4' vorrei estrarre quale è l'idprofile che contiene questa esatta lista di valori.

    come potete notare la lista 1,2,3,4 è contenuta anche in altri IDPROFILE, ma solo il numero 1 contiene solamente 1 2 3 4.

    Spero di essere stato chiaro 

    Grazie del vostro aiuto 

    GianPiero

    CREATE TABLE #PROFILEDETAILS (IDPROFILE INT, IDSENDER INT)

    INSERT INTO #PROFILEDETAILS VALUES
    (1,1),
    (1,2),
    (1,3),
    (1,4),
    (2,1),
    (2,2),
    (2,6),
    (3,1),
    (3,2),
    (3,5),
    (3,6),
    (3,7),
    (3,9),
    (3,10),
    (4,1),
    (4,2),
    (4,3),
    (4,4),
    (4,5),
    (4,6),
    (4,7),
    (4,10),
    (4,11),
    (4,14),
    (5,1),
    (5,2),
    (5,6),
    (5,8),
    (5,9),
    (5,10),
    (5,11),
    (5,14),
    (6,1),
    (6,2),
    (6,5),
    (6,6),
    (6,9),
    (6,10),
    (7,1),
    (7,2),
    (7,6),
    (7,9),
    (7,10),
    (7,12),
    (8,1),
    (8,2),
    (8,5),
    (8,6),
    (8,7),
    (8,9),
    (8,10),
    (8,11),
    (8,14),
    (9,1),
    (9,2),
    (9,6),
    (9,8),
    (9,10),
    (10,1),
    (10,2),
    (10,5),
    (10,6),
    (10,9),
    (10,10),
    (11,1),
    (11,2),
    (11,3),
    (11,4),
    (11,5),
    (11,6),
    (11,7),
    (11,9),
    (11,10),
    (11,11),
    (11,14),
    (12,1),
    (12,2),
    (12,5),
    (12,6),
    (12,7),
    (12,9),
    (12,10),
    (12,11),
    (12,14),
    (13,1),
    (13,2),
    (13,3),
    (13,4),
    (13,5),
    (13,6),
    (13,7),
    (13,8),
    (13,9),
    (13,10),
    (13,11),
    (13,12),
    (13,14),
    (14,1),
    (14,2),
    (14,6),
    (14,10),
    (14,11),
    (14,14),
    (15,1),
    (15,2),
    (15,6),
    (15,8)

    SELECT * FROM #PROFILEDETAILS

    DROP TABLE #PROFILEDETAILS

    venerdì 10 febbraio 2017 15:32

Risposte

  • Ciao!

    Buttata giù al volo, va ottimizzata e testata, fai sapere!

    (mi piacerebbe trovare anche qualcosa di più elegante)

    CREATE TABLE #Valori (IDSENDER int)
    
    INSERT INTO #Valori VALUES (1),(2),(3),(4)
    
    DECLARE @numValori int = (SELECT COUNT(*) FROM #Valori);
    
    WITH Tabella AS (
    SELECT p.IDPROFILE, SUM(valori.OK) as numOK, COUNT(*) as num
    FROM #PROFILEDETAILS p
    OUTER APPLY (SELECT 1 as OK FROM #Valori v
    				WHERE v.IDSENDER = p.IDSENDER) as valori
    GROUP BY p.IDPROFILE)
    SELECT IDPROFILE FROM Tabella
    WHERE num = @numValori 
    AND numOK = @numValori
    
    

    • Contrassegnato come risposta brggpr sabato 11 febbraio 2017 18:11
    venerdì 10 febbraio 2017 17:33

Tutte le risposte

  • Ciao!

    Buttata giù al volo, va ottimizzata e testata, fai sapere!

    (mi piacerebbe trovare anche qualcosa di più elegante)

    CREATE TABLE #Valori (IDSENDER int)
    
    INSERT INTO #Valori VALUES (1),(2),(3),(4)
    
    DECLARE @numValori int = (SELECT COUNT(*) FROM #Valori);
    
    WITH Tabella AS (
    SELECT p.IDPROFILE, SUM(valori.OK) as numOK, COUNT(*) as num
    FROM #PROFILEDETAILS p
    OUTER APPLY (SELECT 1 as OK FROM #Valori v
    				WHERE v.IDSENDER = p.IDSENDER) as valori
    GROUP BY p.IDPROFILE)
    SELECT IDPROFILE FROM Tabella
    WHERE num = @numValori 
    AND numOK = @numValori
    
    

    • Contrassegnato come risposta brggpr sabato 11 febbraio 2017 18:11
    venerdì 10 febbraio 2017 17:33
  • Wow 

    grazie. Non so se la puoi rendere più elegante, ma cosi sembra funzionare.

    Mi hai anche dato lo spunto per capire come funziona 

    grazie ancora Luca

    GianPiero

    sabato 11 febbraio 2017 18:11